해결된 질문
작성
·
217
1
{% for choice in question.choice_set.all %}
<input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}">
<label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br>
{% endfor %}
detail.html에서
question.choice_set.all 로 각 choice를 li로 뿌려주는데
어는 부분에서 Question 객체가 Choice객체를 의존하게 되는지 모르겠어요.
model안에 있는
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
이 부분인가요?
언뜻 Question 객체에서 question이란 객체변수로 Choice 객체를 받아줘야 할 것 같은데 말이죠.
그래야, question.choice라는 식으로 접근할 수 있을테니까요? 여기는 Choice객체 안이라서 좀 햇갈립니다. ㅎ
아니면 저렇게 ForeignKey를 설정하면, 내부적으로 Question객체에 Choice객체가 의존하게 되나요?
잘 몰라서 이상한 질문 드리는 것 같네요 ㅎ
답변 1
1
안녕하세요 bigseoul님,
그 부분은 혼란될 수 있을 것 같은데, 장고 내부에서 backward relationship을 자동적으로 지원하기 때문에, <model>_set
으로 자신을 가리키는 모델을 불러올 수 있습니다.
예제를 보시면 말씀하셨던 것과 같이 Choice가 Question을 가리키고 있는데, Question 입장에서는 자신을 가리키고 있는 모든 엔트리를 choice_set
으로 불러올 수 있습니다.
제가 잘 이해했는지는 모르겠지만, Bigseoul님이 말씀하신 것도 지원을 합니다.
choice.question.id
식으로도 접근이 가능합니다(여기서 choice는 하나의 오브젝트구요)
자세한 공식 내용은 https://docs.djangoproject.com/en/4.0/topics/db/queries/#following-relationships-backward 있습니다.
그럼 도움이 되었길 바랍니다.