2016-12-06 2 views
1

Я учусь Django 1.10 официальный учебник часть 2Джанго: объекты и model_set

class Question(models.Model): 
    # ...... 

class Choice(models.Model): 
    question = models.ForeignKey(Question, on_delete=models.CASCADE) 
    #....... 

Последние я увидел следующую команду: -

q = Question.objects.get(id=1) 
q.choice_set.all() 

Мои вопросы: -

Как экземпляр Вопрос содержат choice_set, я знаю его для доступа к связанным объектам.

Почему это не действует

c = Choice.objects.get(id=1) 
c.question_set.all() 

ответ

3

Модель Вопрос не имеет явную ссылку на модель выбора; однако Django автоматически добавляет обратную ссылку, которая по умолчанию называется choice_set. Вы можете переопределить related_name ключевого слова на модели, такие как:

class Choice(models.Model): 
    question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name='choices') 

Теперь вы можете ссылаться на все выборы на вопрос, как это:

q = Question.objects.get(pk=1) 
q.choices.all() 

Чтобы ответить на ваш второй вопрос, то причина вы не можете использовать ссылку question_set.all() от выбор объект есть потому, что для каждого выбора есть только один вопрос плюс есть явно ссылка t o объект вопроса. Другими словами, модель выбора уже имеет поле Вопрос, который указывает на модель вопроса.

Надеюсь, что это поможет.

+0

Спасибо, я также упомянул 'RelatedManager' https://docs.djangoproject.com/en/1.10/ref/models/relations/#related-objects-reference. Можете ли вы связать, где я могу получить такую ​​информацию для будущих ссылок. –

+0

Эта информация и многое другое доступны в официальной документации Django по адресу: https://docs.djangoproject.com/en/1.10/ – user4426017

Смежные вопросы