3 回答

TA貢獻(xiàn)1776條經(jīng)驗(yàn) 獲得超12個(gè)贊
當(dāng)然,對(duì)于 django 來(lái)說(shuō),這兩個(gè)項(xiàng)目是相同的。
負(fù)責(zé)此的行是:
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()
第一的()?
返回查詢集匹配的第一個(gè)對(duì)象,如果沒(méi)有匹配的對(duì)象則返回 None 。如果 QuerySet 沒(méi)有定義排序,則查詢集自動(dòng)按主鍵排序。這會(huì)影響聚合結(jié)果,如與默認(rèn)排序或 order_by() 的交互中所述。
然而,罪魁禍?zhǔn)资牵?/p>
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 )
您可以考慮將尺碼添加為產(chǎn)品字段,并根據(jù)變體創(chuàng)建單獨(dú)的產(chǎn)品。但是,簡(jiǎn)單地檢索變體并確保僅通過(guò)將其傳遞給 filter() 來(lái)增加正確的項(xiàng)目也是一種正確的方法。

TA貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個(gè)贊
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貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超3個(gè)贊
我認(rèn)為問(wèn)題在塊
if order_item_qs.exists():
order_item = order_item_qs.first()
order_item.quantity += 1
order_item.save()
此代碼塊僅在您需要將其重寫(xiě)為
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()
```
添加回答
舉報(bào)