我使用外键有两个模型文章和博客相关。我想在提取文章时只选择博客名称。
articles = Articles.objects.all().select_related('blog__name')
生成的查询显示它选择了Blog模型中的所有字段。 我尝试使用select()和defer()和select_related,但两者都没有用完。
articles = Articles.objects.all().select_related('blog__name').only('blog__name', 'title', 'create_time')
以上查询导致错误:select_related中提供的字段名称无效:选项包括:博客
如何生成查询以便仅选择文章字段和博客名称?
答案 0 :(得分:19)
您可以使用annotate()。
>>> a = Articles.objects.annotate(blog_name=F('blog__name')).first()
>>> a.title
>>> a.blog_name
答案 1 :(得分:12)
select_related
,然后您可以对其进行更多过滤。这将有效:
Articles.objects.select_related('blog').only('blog__name', 'title', 'create_time')
答案 2 :(得分:0)
可以通过在 only
部分中再添加一个字段来完成,它是 blog
(我认为它有助于 Django 保持对象之间的关系(文章和博客):
articles = Articles.objects.select_related(
'blog',
).only(
'blog',
'blog__name',
'title',
'create_time',
)
在 Django==2.2.19 上测试