Django ManyToManyField TIL
$movie$models.py
from django.utils import timezone
class Actor(models.Model):
first_name = models.CharField(max_length= 50)
last_name = models.CharField(max_length= 50)
date_of_birth = models.DateTimeField()
movie = models.ManyToManyField('Movie')
class Meta():
db_table = 'actors'
class Movie(models.Model):
title = models.CharField(max_length= 50)
release_date = models.DateTimeField()
running_time = models.IntegerField()
class Meta():
db_table = 'movies'
영화배우와 영화가 N : N 으로 연결되있는 모델이다.
Actor 인스턴스와 Movie 인스턴스가 다대다로 연결 시 Junction Table을 생성하여야 하지만 models.ManyToManyField를 통해 따로 테이블을 만들 필요가 없다.
Django 에서 제공되는 모듈의 기능으로 자동으로 연결 테이블생성하여 연결하기 때문이다.
사용법은 다음과 같다.
테이블 생성
models.ManyToManyField('연결할 테이블명',through ='연결결되는 테이블명')
정참조하는 테이블에서의 값추가, 제거
a = Movie.objects.get(id = 1)
b = Movie.objects.get(id = 2)
# 추가
Actor.objects.get(id = 1).movie.add(a,b)
# 제거
Actor.objects.get(id = 1).movie.remove(b)
역참조하는 테이블에서의 값추가, 제거
a = Actor.objects.get(id= 1)
b = Actor.objects.get(id= 2)
# 추가
Movie.objects.get(id = 1).actor_set.add(a,b)
# 제거
Movie.objects.get(id = 1).actor_set.remove(a)
전체 제거
# 정참조의 경우
Actors.objects.get(id = 1).movie.clear()
# 역참조의 경우
Movie.objects.get(id = 1).actor_set.clear()
Junction table에서 추가적인 column 값이 존재하지 않으면 테이블을 생성하지않고 ManyToManyField를 통해 테이블간 N:N 연결하여 쓸 수 있다.
Author And Source
이 문제에 관하여(Django ManyToManyField TIL), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@minhyuk_ko/Django-ManyToManyField-고찰저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)