Python 从django中的模型字段中删除值

Python 从django中的模型字段中删除值,python,django,Python,Django,我在django的基本电子商务网站上工作。我有以下观点来检查订单是否成功 def handlerequest(request, id): order=Order.objects.get(id=id) items=order.orderitem_set.all() verify = Checksum.verify_checksum(response_dict, MERCHANT_KEY, checksum) if verify: if respons

我在django的基本电子商务网站上工作。我有以下观点来检查订单是否成功

def handlerequest(request, id):
    order=Order.objects.get(id=id)
    items=order.orderitem_set.all()
    verify = Checksum.verify_checksum(response_dict, MERCHANT_KEY, checksum)
    if verify:
        if response_dict['RESPCODE'] == '01':
            order.save()
            print('order successful')
        else:
            order.dstatus="Cancelled"
            order.save()
            
            
    return render(request, 'handlerequest.html', {'response': response_dict,'order':order})
这里的项目指的是用户选择购买的产品。我的产品型号如下所示,带有尺寸型号。(我删除了一些字段)

我所做的是,在我的siz模型中,我添加了几种尺寸(如S、L、M),对于产品,我选择了每种产品可用的尺寸。现在我担心的是,每当有人在查看订单是否成功后订购某件物品时,我希望从该产品中删除订购物品的大小。(例如,如果有人订购大小为L的产品AB,则从该产品的可用大小中删除L) 以下是我的orderitem和订单模型,以供参考

class Order(models.Model):
    customer=models.ForeignKey(Customer,on_delete=models.SET_NULL,null=True,blank=True)
    complete=models.BooleanField(default=False,null=True,blank=False)


class OrderItem(models.Model):
    product=models.ForeignKey(Product,on_delete=models.SET_NULL,null=True)
    order=models.ForeignKey(Order,on_delete=models.SET_NULL,null=True,)
    size=models.ForeignKey(Siz,on_delete=models.SET_NULL,null=True)

我还想记住,如果用户订购了多个项目,那么所有产品的订购尺寸都应该删除。我试着解决这个问题,但没有任何效果。因此,任何帮助都将不胜感激。

考虑到
OrderItem
有一个特定的
Size
与其关联(ForeignKey),我假设一个订单不能包含多个大小(因此,它可以有多个相同大小的产品,但不能有多个不同大小的产品)。如果是这样的话,我建议稍微改变一下型号,这样您就可以了解您有多少产品可用:

class Size(models.Model):
    size=models.CharField(max_length=3,null=True,blank=True)

class Product(models.Model):
    name=models.CharField(max_length=10)

class ProductItem(models.Model): # the "warehouse", ie how many we've got available
    product=models.ForeignKey(Product)
    size=models.ForeignKey(Size)
    quantity=models.IntegerField() # how many still available


class Order(models.Model):
    customer=models.ForeignKey(Customer,on_delete=models.SET_NULL,null=True,blank=True)
    complete=models.BooleanField(default=False,null=True,blank=False)


class OrderItem(models.Model):
    product=models.ForeignKey(Product,on_delete=models.SET_NULL,null=True)
    order=models.ForeignKey(Order,on_delete=models.SET_NULL,null=True,)
    size=models.ForeignKey(Size,on_delete=models.SET_NULL,null=True)
    quantity=models.IntegerField() # how many within a single
请注意
quantity
属性,包括
OrderItem
(订购的数量)和
ProductItem
(还有多少可用)。通过这种方式,您可以轻松地跟踪剩下的产品数量


我认为这种关系在这种情况下并不正确,因为
Size
表是某种枚举-您将在那里添加,比方说,10种不同的大小,并且不应该再接触该表,对吗?多对多关系的一个很好的例子是
作者
,因为多个作者会有多本书,一般来说,这些对象都不是“枚举”或具有有限“可能值”集的对象。最后,
大小
本身并不真正属于任何
产品
,对吗?

我已经在产品模型中有了一个库存字段(我发现在问题中没有显示该字段)。您的解决方案将有助于跟踪我的可用数量,但这不是我想要的。首先,例如,一个产品有5种不同的尺寸,一个人订购一种尺寸的产品,说“s”,然后我希望从该产品中删除尺寸s,这样,如果另一个人看到该产品只有4种尺寸可供他订购,那么您可以在UI上过滤掉它-您只需检查此ProductID和SizeID,数量为0,因此当前不可用。你怎么看?是的,但我仍然必须删除已订购且不可用的尺寸,但你仍然需要在UI中而不是在DB中对其进行过滤,对于此特定产品,特定尺寸不可用,因为数量为0。
class Size(models.Model):
    size=models.CharField(max_length=3,null=True,blank=True)

class Product(models.Model):
    name=models.CharField(max_length=10)

class ProductItem(models.Model): # the "warehouse", ie how many we've got available
    product=models.ForeignKey(Product)
    size=models.ForeignKey(Size)
    quantity=models.IntegerField() # how many still available


class Order(models.Model):
    customer=models.ForeignKey(Customer,on_delete=models.SET_NULL,null=True,blank=True)
    complete=models.BooleanField(default=False,null=True,blank=False)


class OrderItem(models.Model):
    product=models.ForeignKey(Product,on_delete=models.SET_NULL,null=True)
    order=models.ForeignKey(Order,on_delete=models.SET_NULL,null=True,)
    size=models.ForeignKey(Size,on_delete=models.SET_NULL,null=True)
    quantity=models.IntegerField() # how many within a single