从 Django values() 获取外键值
Posted
技术标签:
【中文标题】从 Django values() 获取外键值【英文标题】:Getting foreign key values from Django values() 【发布时间】:2020-10-10 19:32:13 【问题描述】:我正在使用 Django 模型获取数据对象
tabledata=Entity.objects.filter(quarter=1)
使用这种方法,我可以像这样提取外键指定的对象的值
tabledata[0].creator.name
但是当我将代码更改为
tabledata=Entity.objects.filter(quarter=1).values()
我只能提取外键值,但不能提取与外键链接的对象数据的值。类似的东西
tabledata[0][creator][name] does not work
有没有办法以这种方式提取值?
【问题讨论】:
这是使用.values()
不是一个好主意的众多原因中的一个:它侵蚀了模型的逻辑层。
【参考方案1】:
您可以像这样在.values()
中使用查找:
entities = Entity.objects.filter(quarter=1).values('creator__name')
print(entities[0]['creator__name'])
如果需要,您也可以获取其他字段:
Entity.objects.filter(quarter=1).values('creator__name', 'direct_field', 'another_direct_field')
【讨论】:
【参考方案2】:这是使用.values()
[Django-doc] 不是一个好主意的众多原因中的一个:它侵蚀了模型的逻辑层。
您可以使用.annotate(…)
[Django-doc] 将名称添加到值中:
from django.db.models import F
tabledata = Entity.objects.filter(quarter=1).annotate(
creator_name=F('creator__name')
).values()
然后它将出现在字典中的'creator_name'
键下。
但使用.values()
通常只在特定用例中有用。例如,特定值或子查询中的 GROUP BY
。如果你想为给定的模型生成 JSON,你应该使用序列化器。
【讨论】:
以上是关于从 Django values() 获取外键值的主要内容,如果未能解决你的问题,请参考以下文章