Что такое choice_set в учебном пособии по Django?

В учебнике по Django есть такая строка: " Написание первого приложения Django, часть 1":

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

Как choice_set к существованию и что это?

Я полагаю, что часть choice - это строчная версия Choice модели, использованная в руководстве, но что такое choice_set? Можете ли вы уточнить?

ОБНОВЛЕНИЕ: Основываясь на ответе Бена, я нашел эту документацию: Следующие отношения "задом наперед".

Ответ 1

Вы создали внешний ключ на Choice, который связывает каждый с Question.

Итак, каждый Choice явно имеет поле Question, которое вы объявили в модели.

Django ORM также следует за отношением назад от Question, автоматически генерируя поле для каждого экземпляра с именем foo_set, где Foo - это модель с полем ForeignKey к этой модели.

choice_set - это RelatedManager, который может создавать запросы объектов Choice, которые относятся к экземпляру Question, например. q.choice_set.all()

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