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

Selecting specific fields using select_related in Django

我有两个使用外键关联的文章和博客模型。我想在提取文章时 select 只有博客名称。

articles = Articles.objects.all().select_related('blog__name')

生成的查询显示它select编辑了博客模型中的所有字段。 我尝试将 only() 和 defer() 与 select_related 一起使用,但都没有成功。

articles = Articles.objects.all().select_related('blog__name').only('blog__name', 'title', 'create_time')

上述查询导致错误:select_related 中给出的字段名称无效:选择是:博客

如何生成查询,以便只有文章字段和博客名称是 selected?

select_related应该在整个模型上使用,然后你可以进一步过滤它。这将起作用:

Articles.objects.select_related('blog').only('blog__name', 'title', 'create_time')

您可以使用 annotate() 来实现。

>>> a = Articles.objects.annotate(blog_name=F('blog__name')).first()
>>> a.title
>>> a.blog_name

可以通过在 only 部分再添加一个字段来完成,它是 blog(我认为它有助于 Django 保持对象之间的关系(文章和博客):

articles = Articles.objects.select_related(
    'blog',
).only(
    'blog',
    'blog__name',
    'title',
    'create_time',
)

在 Django 上测试==2.2.19