このDjangoアプリチュートリアルのchoice_setとは何ですか?


144

Djangoチュートリアルの最初のDjangoアプリの作成、パート1にこの行があります

p.choice_set.create(choice='Not much', votes=0)

どのようにchoice_set呼ばれ、それは何ですか?

choiceパーツはChoiceチュートリアルで使用したモデルの小文字バージョンだと思いますが、何choice_setですか?詳しく説明できますか?

更新:ベンの答えに基づいて、私はこのドキュメントを見つけました


私はそのドキュメントにリンクしただけで、私の答えよりも明確です。
ベンジェームス

@Ben James:いいえ、私はそれを別の方法で定式化してくれたことを感謝しています。特にORMが行っていることの詳細です。Djangoのドキュメントは、簡潔になる場合があります。
Peter Mortensen

40
これを聞いてくれてありがとう、チュートリアルでは説明していないので戸惑いました。
クラウディオ2013年

4
うわー、それは初心者向けに読み込まれたコード行です。私にとってのハードルは、choice.votesを1つインクリメントするために、質問に関連する選択肢オブジェクトを取得していることを理解することでした。この時点では、RelatedManagerの概念はチュートリアルで言及されていないため、実際の障害になる可能性があります。
frozenjim 2015

@PeterMortensen記載されているドキュメントを更新していただけますか?ありがとう
MH

回答:


178

Choiceそれぞれをに関連付ける外部キーを作成しましたQuestion

したがって、それぞれにChoice明示的にquestionフィールドがあり、モデルで宣言しました。

DjangoのORMから後方の関係を次のQuestion、あまりにも、自動的に呼び出さ各インスタンス上のフィールドを生成したモデルで、そのモデルにフィールド。foo_setFooForeignKey

choice_setRelatedManagerクエリセットを作成することができたChoiceに関連するオブジェクトQuestionのインスタンスを、例えばq.choice_set.all()

foo_setDjangoが自動的に選択する名前が気に入らない場合、または同じモデルに複数の外部キーがあり、それらを区別する必要がある場合は、へのrelated_name引数を使用して独自のオーバーライド名を選択できますForeignKey


ありがとう。今はもっともっと知っています。choice_setは「マネージャー」ではありませんか?(クラスQuerySetのインスタンスを返すことができます)。それとも同じですか?
Peter Mortensen

2
あなたは正しいです、RelatedManagerそれはクエリセットを作成できるものです。
ベンジェームス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.