from tkinter import CASCADE
from django.db import models
from django.contrib.auth import get_user_model
class Post(models.Model):
image = models.ImageField(verbose_name='이미지', null=True, blank=True)
content = models.TextField(verbose_name='내용')
created_at = models.DateTimeField(verbose_name='작성일', auto_now_add=True)
view_count = models.IntegerField(verbose_name='조회수', default=0)
writer = models.ForeignKey(to=User, on_delete=models.CASCADE, null=True, blank=True)
class Comment(models.Model):
content = models.TextField(verbose_name='내용')
created_at = models.DateTimeField(verbose_name='작성일')
post = models.ForeignKey(to='Post', on_delete=models.CASCADE)
writer = models.ForeignKey(to=User, on_delete=models.CASCADE)
매개인자에 models.Model이 들어가는 부분에 대해서
위 코드를 보면 models.Model이라는 부분이 매개인자로 들어가있다. 해당 부분이 의미하는 바는 상속이다.
상속과 관련한 부분은 따로 정리가 필요하다.
Post가 1이고 Comment가 N이다. 하나의 게시글에는 여러개의 댓글이 달린다.
1:N의 연관관계에서 N인 댓글은 게시글을 참조할 수 있지만 게시글은 댓글을 참조할 수 없다.
위 내용은 code를 통해 확인할 수 있는데 Comment는 post라는 속성에 접근할 수 있지만 Post
는 Comment에 접근할 수 없다. 이렇게 서로 관계가 있는 엔티티중 한쪽만 참조하는 것을 단방향
관계에 있다고 한다.
하지만 엔티티 간에는 서로 양방향 관계를 맺는다. 예를 들어 게시글에는 Comment_id 라는 필드
를 통해 Comment와 Join 할 수 있고 Comment는 Post_id를 통해 Post 엔티티와 Join 할 수 있
다.
객체 연관관계 vs 테이블 연관관계
객체는 참조(주소)로 연관관계를 맺는다.
테이블은 외래키로 연관관계를 맺는다.