당신은 멋쟁이, 우리는 장고쟁이~

0%

Django Models 18편 - Model 상속 related_name, related_query_name


만약 우리가 ForeginKey 나 ManyToManyField 에 related_name 혹은 related_query_name 을 사용하고 있다면, 우리는 언제나 고유한 reverse name 과 query name 들을 해당 필드에 지정해 주어야 합니다.


이 related_name 과 related_query_name 부분에 대해서, 아주 심도있게 clarification 한 곳이 없으므로.


예시만 보고 지나갑니다.


common/models.py


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from django.db import models 

class Base(models.Model):
m2m = models.ManyToManyField(
OtherModel,
related_name = "%(app_label)s_%(class)s_related",
related_query_name = "%(app_label)s_%(class)ss",
)

class Meta:
abstract = True

class ChilA(Base):
pass

class ChildB(Base);
pass

다른 앱도 같이 주어 집니다 rare/models.py


1
2
3
4
from common.models import Base

class ChildB(Base):
pass

common.ChilA.m2m 필드의 역방향 이름은,

common_childa_related 이고,

역방향 쿼리 이름은, common_childas 가 될것입니다.


common.ChildB.m2m 필드의 역방향 이름은,

common_childb_related 이고,

역방향 쿼리 이름은, common_childbs 가 될것입니다.


마지막으로,


rare.childB.m2m 의 역방향 이름은, rare_childb_related 가 되고,

역방향 쿼리 이름은, rare_childbs 가 될것입니다.