2017-07-07 3 views
0

私はすべてBlogsを1つのクエリで取得したいと同時に、ブログがある場合は、各ブログのエントリ(またはエントリ)を知りたいと思います。1つのモデルからdjangoクエリを取得し、そのモデルにForeignKeyという情報を追加する方法はありますか?

class Blog(models.Model): 
    name = models.CharField(max_length=100) 
    tagline = models.TextField() 

class Entry(models.Model): 
    blog = models.ForeignKey(Blog) 
    headline = models.CharField(max_length=255) 

同様に、blog.ENTRY属性にアクセスします。最初は気をつけてください。 1)すべてのブログを取得し、2)そのエントリで各ブログエントリattrの設定:

for blog in Blog.objects.all(): 
    entry = Entry.objects.filter(blog=blog) 
    setattr(blog, 'ENTRY', entry) 

しかし、私はforループ内のエントリフィルタクエリを行うにはしたくないので、私は、ただ一つのクエリでこれをやりたいです。

+0

あなたがしようとしていることがわかりません。各ブログには、すでに関連エントリのクエリーセットである属性「entry_set」があります。 –

+0

このスレッドと 'select_related'のDjangoドキュメントをチェックしてください:https://stackoverflow.com/questions/33230540/django-select-related-when-to-use-it – whp

+0

申し訳ございませんが、あなたの質問をあまりにも早く読んでください'select_related'と' prefetch_related'を説明するより良いスレッド:https://stackoverflow.com/questions/23121850/select-related-with-reverse-foreign-keys – whp

答えて

0

コード:

Entry.objects.all().select_related('blog') 

はすべてEntryオブジェクトをフェッチし、それが一つのクエストでblog属性だ移入します。

Blogと同じことは、リレーションが1対多であるため、単一クエリではモデルができません。

select_relatedprefetch_relatedに関連するコメントトピックで推奨されていることを見てみましょう。特に第2のもの。

関連する問題