【问题标题】:Getting foreign key values from Django values()从 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() 不是一个好主意的众多原因中的一个:它侵蚀了模型的逻辑层。

标签: python django django-models orm


【解决方案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,你应该使用序列化器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-07
      • 2020-01-27
      • 1970-01-01
      • 1970-01-01
      • 2013-12-28
      • 2016-02-02
      相关资源
      最近更新 更多