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

如何使用Queryset批量转换模型字段的取值集合?

Django批量更新模型字段值(基于映射字典)

不用遍历用户对象,直接用Django ORM的Case/When表达式配合批量更新就能实现,具体步骤如下:

  1. 导入必要的ORM工具和模型:
from django.db.models import Case, When, Value, F
from your_app.models import User
  1. 定义你的国家名称映射字典:
new_country_names = {"Micronesia": "States of Micronesia", "Macedonia": "North Macedonia"}
  1. 构建条件匹配列表:
    把字典中的每一组新旧名称转换成When条件,用于匹配和替换:
when_clauses = [
    When(country=old_name, then=Value(new_name))
    for old_name, new_name in new_country_names.items()
]
  1. 执行批量更新:
    先筛选出需要更新的用户,再用update()方法批量替换字段值:
User.objects.filter(country__in=new_country_names.keys()).update(
    country=Case(*when_clauses, default=F('country'))
)

关键说明:

  • filter(country__in=new_country_names.keys()):精准筛选出国家名称在映射列表中的用户,避免更新无关数据
  • Case(*when_clauses):根据用户当前的country值,匹配对应的替换规则,返回新名称
  • default=F('country'):兜底处理未匹配到的用户(已过滤场景下几乎不会触发),保持原字段值不变
  • 整个操作是数据库层面的单条SQL批量更新,性能远高于遍历每个对象逐个保存的方式

内容的提问来源于stack exchange,提问作者Baz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 05:42:36