[Django] 정참조, 역참조
1. 정참조, 역참조
models.py
class Actor(models.Model):
first_name = models.CharField(max_length=45)
last_name = models.CharField(max_length=45)
date_of_birth = models.DateField()
movies = models.ManyToManyField('Movie', through='ActorMovie', related_name='Actor')
class Meta:
db_table = 'actors'
class Movie(models.Model):
title = models.CharField(max_length=45)
release_date = models.DateField()
running_time = models.IntegerField()
class Meta:
db_table = 'movies'
class ActorMovie(models.Model):
actor = models.ForeignKey('Actor', on_delete=models.CASCADE)
movie = models.ForeignKey('Movie', on_delete=models.CASCADE)
class Meta:
db_table = 'actors_movies'
class Actor(models.Model):
first_name = models.CharField(max_length=45)
last_name = models.CharField(max_length=45)
date_of_birth = models.DateField()
movies = models.ManyToManyField('Movie', through='ActorMovie', related_name='Actor')
class Meta:
db_table = 'actors'
class Movie(models.Model):
title = models.CharField(max_length=45)
release_date = models.DateField()
running_time = models.IntegerField()
class Meta:
db_table = 'movies'
class ActorMovie(models.Model):
actor = models.ForeignKey('Actor', on_delete=models.CASCADE)
movie = models.ForeignKey('Movie', on_delete=models.CASCADE)
class Meta:
db_table = 'actors_movies'
1)정참조
해당 객체가 다른 객체의 Foreign Key를 가지고 있거나 1:1 관계로 있는 상황에서 참조를 하는 경우
ActorMovie 테이블이 Actor 테이블과 Movie 테이블을 정참조하는 것이고
Actor 테이블이 Movie 테이블을 정참조한다.
2) 역참조
해당 객체를 참조하고 있는 다른 객체를 참조하려고 하는 경우
다른 객체가 Foreign Key를 가지고 있거나 N:N 관계인 경우
Movie 테이블이 바로 Actor 테이블을 참조하려고 할 때 이를 역참조라고 한다.(through 옵션)
만약 Movie 테이블이 ActorMovie 테이블을 통해 Actor 테이블을 참조한다고 하면,
1) Movie 테이블이 ActorMovie 테이블을 역참조하고
2) ActorMovie 테이블이 Actor 테이블을 정참조한다
이런 순서로 참조를 진행하게 된다.
2. 역참조 사용 방법
1) _set manager 사용
{참조되는 모델}.{참조하는 모델의 소문자}_set.all()
Actor.movie_set.all()
2) related_name 사용
{참조하는 모델}.{참조되는 모델(FK 있는)의 컬럼}.{역참조 관계명}.all()
Movie.first_name.philmo_name.all()
Author And Source
이 문제에 관하여([Django] 정참조, 역참조), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@kdh10806/Django-정참조-역참조
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
{참조되는 모델}.{참조하는 모델의 소문자}_set.all()
Actor.movie_set.all()
{참조하는 모델}.{참조되는 모델(FK 있는)의 컬럼}.{역참조 관계명}.all()
Movie.first_name.philmo_name.all()
Author And Source
이 문제에 관하여([Django] 정참조, 역참조), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kdh10806/Django-정참조-역참조저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)