반응형
Django 에서 ManyToManyField를 사용하다 보면 중간 테이블이 자동으로 만들어 지는 것이 아닌
내가 원하는 정보를 넣어서 중간 테이블을 커스텀 하려고 하는 경우가 발생한다.
(필자의 경우 오늘 그랬다.)
나의 경우에는 유저와 게시물로 Like를 다대다관계로 만들었고 그 중에서 Like 발생 날짜를 테이블에 넣어주고자 했다.
from django.db import models
class User(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Post(models.Model):
title = models.CharField(max_length=100)
desc = models.CharField(max_length=100)
like = models.ManyToManyField(
User,
related_name="users", through="LikePost"
)
def __str__(self):
return self.name
class LikePost(models.Model):
user = models.ForignKey(User, on_delete=models.CASCADE)
post = models.ForignKey(Post, on_delete=models.CASCADE)
created_at = models.DateField(auto_now_add = True)
위에 예시로 적은 코드를 보면 LikePost라는 중간 테이블을 작성하고
Post에 있는 ManyToManyField에서 through 를 이용하여 LikePost 라는 모델 클래스를 지정했다.
이렇게 원하는 데이터를 저장하는 ManyToManyField의 중간테이블을 생성이 가능합니다.
이 외에도 잘 없겠지만 중개모델에 ForignKey가 2개를 넘어가면 , makemigrations 에서 오류가 발생합니다.
이 부분에서 through_field를 지정하여 해결합니다.
예시로 Post,User 이 외에 뭐.. 게시글 추천인? 이 존재한다고 가정하면
Post,User,Recommender 이렇게 세가지가 존재할 것입니다.
이런 경우에 아래 방식처럼
through_field=('post','user')
( 소스모델, 타겟모델 ) 을 순서대로 명시해주면 해결이 됩니다.
반응형
'Python > Django' 카테고리의 다른 글
| [Django] 마이그레이션을 합쳐보아용 (1) | 2022.12.06 |
|---|---|
| Django 모델 ForeignKeyField on_delete 종류 (0) | 2022.06.13 |