0

我设置了模型,以便在将酒添加到商店时,它会根据计数为其提供自己的店内 ID。我称其为 SPI。加法功能工作正常,它正确分配了正确的 SPI。但是我在删除功能上遇到了麻烦。当从表中删除一个对象时,我需要它遍历剩余的对象并将它们的 SPI 设置为少一个。但是我不断收到错误StoreLiquor matching query does not exist. Lookup parameters were {'StoreLiquorID': 7, 'storeID': <Store: test store>}我没有正确执行查询吗?

型号:

class Store(models.Model):
    StoreID = models.AutoField(primary_key=True)
    user = models.ManyToManyField(User)
    StoreName = models.CharField('Store Name', max_length=30)
    (other things here too but probably not necessary for this case)

class StoreLiquor(models.Model):
    StoreLiquorID = models.AutoField(primary_key=True)
    liquorID = models.ForeignKey(Liquor)
    storeID = models.ForeignKey(Store)
    StorePrice = models.DecimalField('Store Price', max_digits=5, decimal_places=2)
    SPI = models.PositiveIntegerField('SPI', max_length=10)

风景:

def delete(request, liquor_id, store_id):
    storeID = Store.objects.get(StoreID=store_id)
    StLiquor = StoreLiquor.objects.get(storeID=store_id, StoreLiquorID=liquor_id)
    LiqSPI = StLiquor.SPI
    SPIcount = StoreLiquor.objects.filter(storeID=store_id).count()

    for newSPI in range(LiqSPI, SPIcount):
        newStLiquor = StoreLiquor.objects.get(storeID=storeID, StoreLiquorID=newSPI)
        newStLiquor.SPI = newSPI-1

    StLiquor.delete()
    return HttpResponseRedirect(request.META.get('HTTP_REFERER')) 
4

1 回答 1

1

而不是for循环,使用 queryset.update 与django.db.models.F

from django.db.models import F

...

StoreLiquor.objects.filter(storeID=storeID, SPI__gt=LiqSPI).update(SPI=F('SPI')-1)
于 2013-09-14T04:54:56.973 回答