如何在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
相关产品推荐
相关产品推荐

