• 카테고리

    질문 & 답변
  • 세부 분야

    웹 개발

  • 해결 여부

    해결됨

detail.html에서 choice를 뿌려주는 데, 어느 부분에서 Choice객체가 Question객체에 의존하는지 모르겠어요.

23.06.09 16:47 작성 조회수 180

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 있습니다.

 

그럼 도움이 되었길 바랍니다.