You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用F函数结合字典更新Django Product模型库存失败求助

解决Django批量更新产品库存的问题

你的问题出在无法将Python字典的get方法与Django的F表达式结合使用——F表达式是在数据库层面执行的操作,ORM没办法把dict.get(F("id"))转换成有效的SQL语句,自然无法正确更新数据。

正确的做法是使用Django的Case和When来实现条件批量更新,针对每个产品ID设置对应的库存值:

from django.db.models import Case, When, Value

# 先过滤出需要更新的产品
products = Product.objects.filter(id__in=cart_items.keys())

# 构建条件更新规则:每个ID对应指定的count值
update_rules = [
    When(id=product_id, then=Value(count))
    for product_id, count in cart_items.items()
]

# 执行批量更新
products.update(count=Case(*update_rules))

这段代码会生成一条包含CASE WHEN逻辑的SQL语句,一次性完成所有匹配产品的库存更新,既保证了效率,也能准确对应每个产品的目标库存值。

内容的提问来源于stack exchange,提问作者Андрей

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 11:55:55