从Django values()获取外键值

2024-06-20 04:11:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用

tabledata=Entity.objects.filter(quarter=1)

使用此方法,我能够提取外键指定的对象的值,如下所示

tabledata[0].creator.name

但是当我把代码改成

tabledata=Entity.objects.filter(quarter=1).values()

我只能提取外键值,但不能提取与外键链接的对象数据的值。差不多

tabledata[0][creator][name]  does not work

有没有一种方法可以这样提取值


Tags: 数据对象方法代码nameobjects链接filter
2条回答

您可以在.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')

这是使用^{} [Django-doc]不是一个好主意的众多原因之一:它侵蚀了模型的逻辑层

可以使用^{} [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,应该使用序列化程序

相关问题 更多 >