在Django中使用select_related选择特定字段

RA1*_*123 21 django django-queryset django-select-related python-2.7 django-1.8

我使用外键有两个模型文章和博客相关.我想在提取文章时只选择博客名称.

articles = Articles.objects.all().select_related('blog__name')
Run Code Online (Sandbox Code Playgroud)

生成的查询显示它选择了Blog模型中的所有字段.我尝试使用select()和defer()与select_related,但两个都没有用.

articles = Articles.objects.all().select_related('blog__name').only('blog__name', 'title', 'create_time')
Run Code Online (Sandbox Code Playgroud)

上述查询导致错误:select_related中给出的字段名称无效:选项为:blog

如何生成查询以便仅选择文章字段和博客名称?

brk*_*rki 21

您可以使用annotate().

>>> a = Articles.objects.annotate(blog_name=F('blog__name')).first()
>>> a.title
>>> a.blog_name
Run Code Online (Sandbox Code Playgroud)

  • 这不是预期的答案。下面这个就解决了这个目的。 (6认同)

T. *_*tal 17

select_related应该在整个模型上使用,然后你可以更多地过滤它.这将有效:

Articles.objects.select_related('blog').only('blog__name', 'title', 'create_time')
Run Code Online (Sandbox Code Playgroud)