如何使用 select_related

Posted

技术标签:

【中文标题】如何使用 select_related【英文标题】:How to use select_related 【发布时间】:2018-09-13 23:16:00 【问题描述】:

如何使用select_related 获取下面员工类的名字和姓氏。

class Employee(models.Model):
    """
    Model, which holds general information of an employee.

    """
    user = models.OneToOneField(User, related_name='users',
                                on_delete=models.CASCADE, unique=True)
    photo_logo = models.FileField(null=True, blank=True)

这是我实现查询的方式

emp=Employee.objects.filter(pk=1).select_related('user').values('user_first_name','user_last_name','id')

但我在django shell 中运行打印语句后得到以下日志

Cannot resolve keyword 'user_first_name' into field. Choices are: address, address_id, attendance, basic,

【问题讨论】:

emp=Employee.objects.filter(pk=1).select_related('user').values('user__first_name','user__last_name','id') 需要使用双下划线访问相关模型字段。 【参考方案1】:

由于您需要用户模型的特定字段,因此在这种情况下您不需要select_related,只需使用:

emp=Employee.objects.filter(pk=1).values('user__first_name','user__last_name','id')

查询。

请注意,您应该使用双下划线__ 来执行连接。

【讨论】:

【参考方案2】:

我们应该使用__ 来表示关系field

emp=Employee.objects.filter(pk=1).select_related(
     'user'
).values('user__first_name','user__last_name','id')

【讨论】:

以上是关于如何使用 select_related的主要内容,如果未能解决你的问题,请参考以下文章

如何强制 Django Admin 使用 select_related?

如何使用 select_related 获取 ManyToMany 字段值

如何在模板 Django 中使用 select_related?

如何使用 google-appengine 和 django-nonrel 模仿“select_related”?

使用 select_related 时,如何使用相关模型的自定义管理器?

使用 select_related 将查询中的数据结果序列化为 json