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()
```
添加回答
舉報