我正在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})
这里的物品是指用户选择购买的产品。我的产品型号如下所示(带有尺寸型号)(我已删除了一些字段)
class Siz(models.Model):
size=models.CharField(max_length=3,null=True,blank=True)
class Product(models.Model):
name=models.CharField(max_length=10)
size=models.ManyToManyField(Siz)
我所做的是,在我的siz模型中,我添加了几种尺寸(例如S,L,M),对于产品,我选择了每种产品可用的尺寸。现在我担心的是,每当有人下订单时,在检查订单成功之后,我想删除从产品中订购的商品的尺寸。(例如,如果某人订购了尺寸为L的商品AB我要删除的产品尺寸L) 以下是我的订单项和订单模型供参考。
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)
我还想记住,如果用户订购了多个商品,则应该删除所有产品的订购尺寸。我尝试解决此问题,但对我没有任何帮助。因此,我们将不胜感激。
答案 0 :(得分:1)
考虑到OrderItem
具有与其相关联的特定Size
(外键),我假设单个订单不能包含多个尺寸(因此,它可以具有相同尺寸的多个产品,但是不能多个各种尺寸的产品)。如果是这种情况,我建议您稍微更改一下模型,以便跟踪可用的产品数量:
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
属性。这样,您可以轻松跟踪剩下的产品数量。
我认为这种many-to-many关系在这种情况下并不正确,因为Size
表是某种枚举-假设您要在其中添加10种不同的大小,再也不会碰那个桌子了吧?多对多关系的一个很好的例子是Book
和Author
,因为有多个作者撰写的多本书,而且这些对象通常都不是“枚举”或带有有限的“可能值”集。最后,Size
本身并不真正属于任何Product
,对吧?