3 回答
TA贡献1776条经验 获得超12个赞
当然,对于 django 来说,这两个项目是相同的。
负责此的行是:
if order_item_qs.exists(): order_item = order_item_qs.first() # Here, you are always picking the first item that your filter returned, see: https://docs.djangoproject.com/en/dev/ref/models/querysets/#first order_item.quantity += 1 order_item.save()
第一的()¶
返回查询集匹配的第一个对象,如果没有匹配的对象则返回 None 。如果 QuerySet 没有定义排序,则查询集自动按主键排序。这会影响聚合结果,如与默认排序或 order_by() 的交互中所述。
然而,罪魁祸首是:
order_item_qs = OrderItem.objects.filter( item=item, user=request.user, ordered=False)
你想将变化传递给它,例如
order_item_qs = OrderItem.objects.filter( item=item, user=request.user, ordered=False, variation=variation )
您可以考虑将尺码添加为产品字段,并根据变体创建单独的产品。但是,简单地检索变体并确保仅通过将其传递给 filter() 来增加正确的项目也是一种正确的方法。
TA贡献1770条经验 获得超3个赞
order_item_qs = order_item_qs.filter(
Q(item_variations__exact=v)
)
with:
order_item_qs = order_item_qs.filter(item_variations__variation=v)
TA贡献1946条经验 获得超3个赞
我认为问题在块
if order_item_qs.exists():
order_item = order_item_qs.first()
order_item.quantity += 1
order_item.save()
此代码块仅在您需要将其重写为
if len(item_var) > 0:
for items in item_var:
order_item_qs = OrderItem.objects.filter(
item=item,
user=request.user,
ordered=False
).filter(variation__exact=items,)
if order_item_qs.exists():
order_item = order_item_qs.first()
order_item.quantity += 1
order_item.save()
else:
order_item = OrderItem.objects.create(
item=item,
user=request.user,
ordered=False
)
order_item.variation.add(*item_var)
order_item.save()
```
添加回答
举报