我有像
{product_id: count}
这样的口述。
例如
cart_items = {1: 150}
。这个字典代表客户篮子。
我还有带有计数字段的产品模型。它代表库存余额。
我想获取字典中的产品并根据字典中的值更新其数量。
我得到这样的产品:
products = Product.objects.filter(id__in=cart_items)
我想像这样更新数量:
products.update(count=dict.get(F("id"))
但是没用。
谢谢!
你可以这样做,但这是一个非常糟糕的主意。通常,您在数据库中进行联接,因为数据库已为此进行了优化。但是,您可以使用
Case
-When
表达式 [Django-doc] 为此:
from django.db.models import Case, Value, When
products.update(
count=Case(*[When(pk=k, then=Value(v)) for k, v in my_dict.items()])
)
因此,这会将
my_dict
“展开”为(可能)很长的 CASE WHEN … THEN …
序列。然而,这将导致线性搜索减慢更新过程。