What is choice_set in this Django app tutorial?
django, orm, python
Solution
You created a foreign key on `Choice` which relates each one to a `Question`.
So, each `Choice` explicitly has a `question` field, which you declared in the model.
Django's ORM follows the relationship backwards from `Question` too, automatically generating a field on each instance called `foo_set` where `Foo` is the model with a `ForeignKey` field to that model.
`choice_set` is a `RelatedManager` which can create querysets of `Choice` objects which relate to the `Question` instance, e.g. `q.choice_set.all()`
If you don't like the `foo_set` naming which Django chooses automatically, or if you have more than one foreign key to the same model and need to distinguish them, you can choose your own overriding name using the `related_name` argument to `ForeignKey`.
Problem
There is this line in the Django tutorial, Writing your first Django app, part 1: ``` p.choice_set.create(choice='Not much', votes=0) ``` How is `choice_set` called into existence and what is it? I suppose the `choice` part is the lowercase version of the model `Choice` used in the tutorial, but what is `choice_set`? Can you elaborate? UPDATE: Based on Ben's answer, I located this documentation: Following relationships "backward".