如何使用 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”?