使用F结果获取key

问题描述 投票:0回答:1

我有像

{product_id: count}
这样的口述。

例如

cart_items = {1: 150}
。这个字典代表客户篮子。

我还有带有计数字段的产品模型。它代表库存余额。

我想获取字典中的产品并根据字典中的值更新其数量。

我得到这样的产品:

products = Product.objects.filter(id__in=cart_items)

我想像这样更新数量:

products.update(count=dict.get(F("id"))

但是没用。

谢谢!

python django django-models django-orm
1个回答
0
投票

可以这样做,但这是一个非常糟糕的主意。通常,您在数据库中进行联接,因为数据库已为此进行了优化。但是,您可以使用

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 …
序列。然而,这将导致线性搜索减慢更新过程。

© www.soinside.com 2019 - 2024. All rights reserved.