web-dev-qa-db-ja.com

Djangoでselect_relatedを使用して特定のフィールドを選択する

外部キーを使用して関連する記事とブログの2つのモデルがあります。記事を抽出しながらブログ名のみを選択したい。

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

生成されたクエリは、ブログモデルからすべてのフィールドを選択したことを示しています。 select_relatedでonly()とdefer()を使用してみましたが、どちらもうまくいきませんでした。

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

上記のクエリでエラーが発生しました:select_relatedで指定されたフィールド名が無効です:選択肢は次のとおりです:ブログ

記事フィールドとブログ名のみが選択されるようにクエリを生成するにはどうすればよいですか?

25
RA123

これには annotate() を使用できます。

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

select_relatedはモデル全体で使用する必要があります。そうすれば、さらにフィルタリングできます。これは動作します:

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