Django

[Django] 28. 1:N 관계

개발자 뭄뭄 2022. 11. 4. 21:19
반응형

1. 1:N?


  • Many-to-one relationships
  • 한 테이블의 0개 이상의 레코드가 다른 테이블의 레코드 한 개와 관련된 경우

⇒ 예를 들어 고객(1)의 주문(N), 게시글(1)의 댓글(N)의 관계라고 할 수 있겠다.

2. Foreign Key?


  • 외래키
  • 다른 테이블의 행을 식별할 수 있는 키 ⇒ 참조되는 테이블의 PK를 가리킨다.
    • 참조무결성 때문에 테이블의 유일한 값을 참조해야 한다.
  • 참조하는 테이블 행 여러개가 참조되는 테이블의 동일한 행을 참조할 수 있다.

3. models.py 재 생성하기


#articles/models.py

class Comment(models.Model):
	article = models.ForeignKey(Article, on_delete=models.CASCADE)
	content = models.CharField(max_length=200)
  • ForeignKey(참조하는 모델클래스, on_delete, **options)
  • on_delete option : https://docs.djangoproject.com/en/3.2/ref/models/fields/#foreignkey
    • 외래키가 참조하는 객체(부모)가 사라졌을때?
    • CASCADE : 자식을 부모따라 삭제합니다
    • PROTECT : 자식을 보호합니다.
    • SET_NULL : 부모 삭제 시에 NULL이 됩니다.
    • SET_DEFAULT : 부모 삭제시에 디폴트 값으로 돌아갑니다.

4. Related manager


  • 역참조?
    • N:1 관계에서 1이 N을 참조하는 것

    → 즉 게시물에서 덧글을 조회하는 상황이 ‘역참조’ 이다.

    • article.comment_set.method()
  • related_name
    class Comment(models.Model):
    	article = models.ForeignKey(Article, on_delete=models.CASCADE, related_name="comments)
    	content = models.CharField(max_length=200)
    • 역참조 시에 이름이 ‘comments’로 바뀐다!!

Uploaded by N2T

반응형