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

在Django Model中如何动态迭代获取模型对象的字段值

Django模型动态取字段值实现方法

单个字段动态取值

Python原生提供getattr()方法可以通过字符串形式的属性名取对象属性,替换你原有的user.onefield写法即可:

onefield = "first_name"
# 正确写法,等同于user.first_name
print(getattr(user, onefield))
# 可加默认值避免字段不存在时抛出异常
print(getattr(user, onefield, ""))

多指定字段批量取值

方式1:遍历字段列表取值

已经拿到模型实例的场景下,配合getattr()遍历即可:

fieldnames = ["first_name", "last_name", "email"]
# 逐个打印值
for field in fieldnames:
    print(getattr(user, field))
# 也可以直接生成字段和值对应的字典
user_field_dict = {field: getattr(user, field) for field in fieldnames}

方式2:查询阶段直接取值(性能更优)

如果不需要完整的模型实例,只需要指定字段的取值,可以直接用Django ORM自带的values()或values_list()方法,在查询时就只拉取需要的字段,减少数据库IO和模型实例化开销:

fieldnames = ["first_name", "last_name", "email"]
# 方法1:返回字典列表,每个字典对应一条数据的字段键值对
user_data_list = User.objects.values(*fieldnames)
for user_data in user_data_list:
    print(user_data["first_name"], user_data["last_name"], user_data["email"])

# 方法2:返回元组列表,每个元组对应一条数据的字段值,顺序和传入字段顺序一致
user_value_list = User.objects.values_list(*fieldnames)
for first_name, last_name, email in user_value_list:
    print(first_name, last_name, email)

补充:如果涉及外键、一对一等关联模型的字段取值,上述所有方法都支持Django ORM标准的双下划线跨表语法,比如"user__profile__address"格式的字段名可以直接使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:48:00