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

如何在Django中通过字符串从指定查询集获取值?外键取值问题

通过字符串从Django查询集获取关联模型数据的方法

Django查询集返回的是模型实例对象,不能直接用字典下标(queryset[x]["my_atribute"])的方式动态获取属性,而且values()方法仅返回外键ID,无法拿到关联模型的实际数据,你可以用以下方法解决:

1. 获取普通属性

用Python内置的getattr()函数,直接根据字符串获取模型实例的属性:

queryset = BasicModel.objects.all()
x = 10
my_attribute = "name"
# 获取普通属性值
value = getattr(queryset[x], my_attribute)

2. 获取外键关联模型的属性

如果要获取外键嵌套的属性(比如外键author的username),可以把属性名写成链式字符串(如"author__username"),然后通过拆分字符串逐层获取:

def get_nested_attr(obj, attr_str):
    attrs = attr_str.split('__')
    for attr in attrs:
        obj = getattr(obj, attr)
        if obj is None:
            break
    return obj

# 使用示例:获取外键关联模型的属性
my_attribute = "author__username"
value = get_nested_attr(queryset[x], my_attribute)

3. 批量处理查询集

如果需要批量获取所有对象的目标属性,直接遍历查询集即可:

target_attr = "author__username"
results = [get_nested_attr(item, target_attr) for item in queryset]

这种方式直接操作模型实例,能直接访问外键关联的完整对象,自然可以拿到关联模型的实际数据,完美替代values()的不足。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 05:33:38