Tags
- 스택
- count
- Queue
- stack
- 이진트리
- delete
- 백트래킹
- regexp
- ORM
- 그리디
- 통계학
- N:1
- Article & User
- Vue
- 쟝고
- Tree
- create
- migrations
- M:N
- 트리
- distinct
- DB
- 큐
- update
- SQL
- outer join
- drf
- 뷰
- 완전검색
- Django
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Notice
Recent Posts
Link
데이터 분석 기술 블로그
DB에 대하여(16)_좋아요 모델 관계 설정 (feat. Django) 본문
1. 모델 관계 설정
Many to Many relationships (N:M or M:N)
한 테이블의 0개 이상의 레코드가 다른 테이블의 0개 이상의 레코드와 관련된 경우 양쪽 모두에서 N:1 관계를 갖습니다.
Article(M) - User(N)
0개 이상의 게시글은 0명 이상의 회원과 관련이 있습니다. 게시글은 회원으로부터 0개 이상의 좋아요를 받을 수 있고, 회원은 0개 이상의 게시글에 좋아요를 누를 수 있습니다.
ManyToManyField 작성하기
# articles/models.py
class Article(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
like_users = models.ManyToManyField(settings.AUTH_USER_MODEL)
title = models.CharField(max_length=10)
content = models.TextField()
create_at = models.DateTimeField(auto_now_add=True)
update_at = models.DateTimeField(auto_now=True)
Migration 진행 후 에러가 발생합니다.
user.article_set 역참조 매니저 충돌
- N:1은 유저가 작성한 게시글
- M:N은 유저가 좋아요 한 게시글
- like_users 필드 생성 시 자동으로 역참조. article_set 매니저가 생성됩니다.
- 그러나 이전 N:1(Article_User) 관계에서 이미 같은 이름의 매니저를 사용 중입니다 (user.article_set.all() → 해당 유저가 작성한 모든 게시글 조회).
- 'user가 작성한 글 (user.article_set)'과 'user가 좋아요를 누른 글(user.article_set)'을 구분할 수 없게 됩니다.
- user와 관계된 ForeignKey 혹은 ManyToManyField 둘 중 하나에 related_name 작성이 필요합니다.
related_name 작성 후 Migration 재진행
# articles/models.py
class Article(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
like_users = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='like_articles')
title = models.CharField(max_length=10)
content = models.TextField()
create_at = models.DateTimeField(auto_now_add=True)
update_at = models.DateTimeField(auto_now=True)
생성된 중개 테이블을 확인합니다.
User - Article간 사용 가능한 전체 related manager
'DB' 카테고리의 다른 글
DB에 대하여(18)_프로필 기능 구현 (feat. Django) (0) | 2024.05.05 |
---|---|
DB에 대하여(17)_좋아요 기능 구현 (feat. Django) (0) | 2024.05.04 |
DB에 대하여(15)_Django ManyToManyField (feat. Django) (0) | 2024.05.02 |
DB에 대하여(14)_'through' argument (feat. Django) (0) | 2024.05.01 |
DB에 대하여(13)_ManyToManyField (feat. Django) (0) | 2024.04.30 |