Що таке вибір_набору в цьому навчальному посібнику програми Django?


144

Цей підручник у навчальному посібнику "Джанго", написання першого додатка "Джанго", частина 1 :

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

Як choice_setназивається існування і що це?

Я припускаю, що choiceчастина є малою версією моделі, що Choiceвикористовується в навчальному посібнику, але що таке choice_set? Чи можете ви докладно?

ОНОВЛЕННЯ: Виходячи з відповіді Бена , я знайшов цю документацію: Наступні відносини "назад" .


Я мав би просто пов'язати з цією документацією, це зрозуміліше моєї відповіді.
Бен Джеймс

@ Бен Джеймс: ні, я вдячний, що це було сформульовано по-іншому, особливо розробка того, що робить ОРМ. Документація Джанго може бути часом короткою.
Пітер Мортенсен

40
Дякую за запитання, мене це збентежило, оскільки вони не пояснюють це в підручнику.
клаудіо

4
Нічого собі, це завантажений рядок коду для новачка. Для мене перешкодою було розуміння того, що ми отримуємо Об'єкт вибору, пов’язаний із Запитанням, щоб потім збільшити його вибір. Концепція RelatedManager не була згадана в підручнику до цього моменту, тому це може бути справжнім каменем спотикання.
заморожений

@PeterMortensen чи можете ви оновити документацію там, де вона описана? дякую
MH

Відповіді:


178

Ви створили закордонний ключ, на Choiceякому кожен стосується а Question.

Отже, у кожного Choiceявно є questionполе, яке ви заявили в моделі.

ORM Джанго також слідкує за відношенням назад Question, автоматично генеруючи поле для кожного екземпляра, зване foo_setде Fooмодель з ForeignKeyполем для цієї моделі.

choice_set- це RelatedManagerякий може створювати набори запитів Choiceоб'єктів, що відносяться до Questionекземпляра, наприкладq.choice_set.all()

Якщо вам не подобається foo_setнайменування, яке Django вибирає автоматично, або якщо у вас є кілька зовнішніх ключів до тієї самої моделі, і вам потрібно їх розрізнити, ви можете обрати власне прізвище, використовуючи related_nameаргумент до ForeignKey.


Дякую. Зараз я знаю набагато більше. Не вибір_встановити "Менеджер"? (що може повернути екземпляр класу QuerySet). Або це одне й те саме?
Пітер Мортенсен

2
Ви маєте рацію, це RelatedManagerможе створювати набори запитів.
Бен Джеймс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.