파이썬으로 장고(Django) 공략하기: 입문 강의를 정리한 내용입니다.
Relation
- 모델과 모델 사이의 관계를 말하며, 다음과 같은 종류가 있다.
- Many-to-Many : 하나의 출판사에서 여러 저작물을 낼 수 있고, 하나의 저작물이 여러 출판사에서 낼 수 있다.
- Many-to-One : 게시물 한 개에 여러 개의 댓글이 달린다.
- One-to-One : 한 사람은 하나의 여권만 가질 수 있다.
릴레이션 모델 선언
- Restaurant와 1대 다 관계를 가진 Review 모델을 선언해보자.
- 기존의 Restaurant 모델 아래에 Review 모델을 작성한다.
- models.ForeignKey : Restaurant 모델의 ForeignKey로 선언한다. 실제 데이터베이스에 Restaurant의 pk인 id 값을 저장하는 컬럼(restaurant_id)가 Review에 추가된다.
- on_delete : 연관된 Restaurant이 삭제될 때 이에 의존한 Review들을 어떻게 처리할 건지에 대한 설정
- CASCADE : 모든 댓글 삭제
- SET_NULL : restaurant 속성을 NULL로 처리
- SET_DEFAULT : restaurant 속성을 기본 값으로 업데이트
- DO_NOTHING : 아무 조치도 하지 않는다.
# third/models.py
class Review(models.Model):
point = models.IntegerField()
comment = models.CharField(max_length=500)
restaurant = models.ForeignKey(Restaurant, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
update_at = models.DateTimeField(auto_now=True)