연결된 데이터에 대해서 알아보기 전에, 먼저 Answer 모델을 추가해준다.
# home>models.py
class Answer(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
content = models.TextField()
create_date = models.DateTimeField()
Answer 모델은 어떤 질문에 대한 답변이므로 Question 모델을 속성으로 가져야 한다. 이처럼 어떤 모델이 다른 모델을 속성으로 가지려면 ForeignKey를 이용한다. ForienKey는 쉽게 말해 다른 모델과의 연결을 의미하며, on_delete=models.CASECADE는 답변에 연결된 질문이 삭제되면 답변도 함께 삭제하라는 의미이다.
Answer 모델은 Question 모델과 연결되어 있으므로 데이터를 만들 때 Question 모델 데이터가 필요하다.
>>> q = Question.objects.get(id=1)
>>> Answer.objects.create(question = q, content="안어려워!!")
>>> Answer.objects.get(id=1)
Answer 모델 데이터에 연결된 Question 모델 데이터를 조회할 수 있다.
>>> a = Answer.objects.get(id=1)
>>> a.question
Answer을 통해 Question을 찾는 것은 쉽다.
>>> q = Question.objects.get(id=1)
>>> q.answer_set.all()
[연결된 모델명]_set
과 같은 방법으로 연결된 데이터를 조회할 수 있다.
언제
[연결된 모델명]_set
을 써야할까
질문 1개에는 1개 이상의 답변이 달릴 수 있으므로 질문에 달린 답변은q.answer_set
으로 조회해야 한다.(답변 세트 조회)
답변은 질문 1개에 대한 것이므로 애초에 여러 개의 질문을 조회할 수 없다. 다시 말해 답변 1개 입장에서는 질문 1개만 연결되어 있으므로a.question
만 실행할 수 있다.