django | 7. ORM(2)

sojung·2021년 5월 27일
0

django

목록 보기
8/21
post-thumbnail

연결된 데이터에 대해서 알아보기 전에, 먼저 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 모델 데이터가 필요하다.

1. Answer 모델 데이터 만들기

>>> q = Question.objects.get(id=1)
>>> Answer.objects.create(question = q, content="안어려워!!")

2. Answer 모델 데이터 조회하기

>>> Answer.objects.get(id=1)



3. 연결된 데이터로 조회하기 : 답변에 있는 질문 조회하기

Answer 모델 데이터에 연결된 Question 모델 데이터를 조회할 수 있다.

>>> a = Answer.objects.get(id=1)
>>> a.question

Answer을 통해 Question을 찾는 것은 쉽다.

4. 연결된 데이터로 조회하기 : 질문을 통해 답변 찾기

>>> q = Question.objects.get(id=1)
>>> q.answer_set.all()

[연결된 모델명]_set과 같은 방법으로 연결된 데이터를 조회할 수 있다.

언제 [연결된 모델명]_set을 써야할까
질문 1개에는 1개 이상의 답변이 달릴 수 있으므로 질문에 달린 답변은 q.answer_set으로 조회해야 한다.(답변 세트 조회)
답변은 질문 1개에 대한 것이므로 애초에 여러 개의 질문을 조회할 수 없다. 다시 말해 답변 1개 입장에서는 질문 1개만 연결되어 있으므로 a.question만 실행할 수 있다.

profile
걸음마코더

0개의 댓글