Apa itu choice_set dalam tutorial aplikasi Django ini?

144

Ada baris ini dalam tutorial Django, Menulis aplikasi Django pertama Anda, bagian 1 :

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

Bagaimana choice_setdipanggil menjadi ada dan apakah itu?

Saya kira choicebagian itu adalah versi huruf kecil dari model yang Choicedigunakan dalam tutorial, tetapi apa itu choice_set? Bisakah Anda menguraikan?

UPDATE: Berdasarkan jawaban Ben , saya menemukan dokumentasi ini: Mengikuti hubungan "terbelakang" .

Peter Mortensen
sumber
Saya seharusnya hanya menautkan ke dokumentasi itu, lebih jelas dari jawaban saya.
Ben James
@ Ben James: tidak, saya menghargai kalau dirumuskan dengan cara yang berbeda, terutama penjabaran dari apa yang dilakukan ORM. Dokumentasi Django kadang-kadang bisa singkat.
Peter Mortensen
40
Terima kasih telah menanyakan ini, saya bingung dengan ini karena mereka tidak menjelaskannya dalam tutorial.
claudio
4
Wow, itu adalah baris kode yang dimuat untuk pemula. Bagi saya, rintangannya adalah memahami bahwa kita mendapatkan Obyek Pilihan, terkait dengan Pertanyaan, untuk kemudian meningkatkan pilihan itu. Pilih satu per satu. Konsep RelatedManager belum disebutkan dalam tutorial sampai saat ini sehingga bisa menjadi batu sandungan yang nyata.
frozenjim
@PeterMortensen dapatkah Anda memperbarui dokumentasi yang dijelaskan? terima kasih
MH

Jawaban:

178

Anda membuat kunci asing Choiceyang terkait masing-masing dengan Question.

Jadi, masing-masing Choicesecara eksplisit memiliki questionbidang, yang Anda nyatakan dalam model.

ORANG Django mengikuti hubungan mundur dari Questionjuga, secara otomatis menghasilkan bidang pada setiap contoh yang disebut di foo_setmana Foomodel dengan ForeignKeybidang ke model itu.

choice_setadalah suatu RelatedManageryang dapat membuat querysets Choiceobjek yang berhubungan dengan Questioninstance, misalnyaq.choice_set.all()

Jika Anda tidak suka foo_setpenamaan yang dipilih Django secara otomatis, atau jika Anda memiliki lebih dari satu kunci asing untuk model yang sama dan perlu membedakannya, Anda dapat memilih nama utama Anda sendiri menggunakan related_nameargumen untuk ForeignKey.

Ben James
sumber
Terima kasih. Saya tahu lebih banyak sekarang. Bukankah choice_set seorang "Manajer"? (yang dapat mengembalikan turunan dari kelas QuerySet). Atau apakah itu hal yang sama?
Peter Mortensen
2
Anda benar, ini RelatedManageryang dapat membuat kueri.
Ben James