Comment & Foreign Key
참고한 사이트이다.
https://nachwon.github.io/django-relationship/#order-customer
Comment
는 Post
하나에 여러 개의 Comment
가 달리는 구조로 즉, 다대일 관계를 가짐을 알 수 있다. 이때는 post
의 author
처럼 Foreign Key
를 만들어주어 참조와 역참조 구조를 만들어 주면 된다.
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
class Post(models.Model):
uid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True, primary_key=True)
title = models.CharField(max_length=100)
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
edited_at = models.DateTimeField(auto_now=True)
class Comment(models.Model):
post = models.ForeignKey('Post',on_delete=models.CASCADE,related_name='comments')
# model post 참조
author = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
class ForeignKey(to, on_delete, **options)
to
: 해당 model이 참조하는 model을 할당함.on_delete
: SQL 제약 조건의 동작을 에뮬레이션 함. 다음과 같은 종류가 존재CASCADE
: 연관된 것들을 삭제,SQL
제약 조건인ON DELETE CASCADE
의 동작을 에뮬레이션하고ForeignKey
를 포함한 객체 삭제PROTECT
:ProtectedError
발생을 통해 참조된 객체의 삭제 방지,django.db.IntegrityError
의 서브 클래스SET_NULL
:ForeignKey
를null
로 세팅.null true
설정일 경우만 가능
SET_DEFAULT
:ForeignKey
를 기본 값으로 설정.ForeignKey
의 기본값이 설정되어야 사용 가능SET()
:SET
에 전달된 값을ForeignKey
에 설정하거나callable
일 경우 호출된 결과를 설정. 대부분models.py
가져올 때 쿼리 실행을 피하기 위해callable
을 전달할 필요가 있음.Do_NOTHING
:아무런 행동도 취하지 않는다.
**option
: 부가적인 기능을 도와준다.related_name
: 아래의 역참조 참고.
역참조
위의 ForeignKey
는 "참조키"의 역할을 하는 것. 따라서 이를 선언한 model
은 to
부분에 있는 model class
를 참조하는 것임.
따라서 역참조는 to
부분이 자신을 참조한 여러개의 데이터를 반대로 끌고온다는 의미임.
예시
- 참조
comments = Comment.objects.get(id=1)
comments.post # 1번 댓글을 소유한 post를 가져온다.
- 역참조
posts = Post.objects.get(id=1)
posts.comments.all() # 1번 post에 달린 모든 댓글을 쿼리셋으로 만듦
역참조는 어떻게 하냐면, related_name이라는 **option
을 선언하여 related_name = 'comments'
라고 지정해주면 역참조를 할 model
이 comments
라는 변수를 통해 역참조를 할 수 있게 되는 것이다.
만약 related_name
을 쓰지않으면 자동으로 (model class 이름)_set
으로 참조가 가능하다.
Author And Source
이 문제에 관하여(Comment & Foreign Key), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@wbsl0427/Comment-Foreign-Key저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)