장고에서 'related_name'은 무엇을 사용합니까?
필드 와 필드 related_name
에 유용한 인수 는 무엇입니까 ? 예를 들어 다음 코드에서 ? 의 효과는 무엇입니까?ManyToManyField
ForeignKey
related_name='maps'
class Map(db.Model):
members = models.ManyToManyField(User, related_name='maps',
verbose_name=_('members'))
이 related_name
속성은 User
모델 에서 모델로의 역관계 이름을 지정합니다 .
당신이를 지정하지 않으면 related_name
, 장고는 자동으로 접미사 모델의 이름을 사용하여 하나를 생성 _set
예를 들어, User.map_set.all()
.
당신이 경우 않는 , 예를 들어, 사용자가 지정한 related_name=maps
온 User
모델, User.map_set
작업을 계속하지만, User.maps.
구문은 분명 조금 청소기 덜 투박; 예를 들어, 사용자 객체 가있는 경우와 관련이있는 모델 의 모든 인스턴스를 가져 오는 데 current_user
사용할 수 있습니다 .current_user.maps.all()
Map
current_user
장고 문서는 자세한 내용이 있습니다.
기존 답변에 추가하려면 모델에 동일한 테이블을 가리키는 2 개의 FK가있는 경우 관련 이름을 반드시 입력해야합니다. 예를 들어 BOM의 경우
@with_author
class BOM(models.Model):
name = models.CharField(max_length=200,null=True, blank=True)
description = models.TextField(null=True, blank=True)
tomaterial = models.ForeignKey(Material, related_name = 'tomaterial')
frommaterial = models.ForeignKey(Material, related_name = 'frommaterial')
creation_time = models.DateTimeField(auto_now_add=True, blank=True)
quantity = models.DecimalField(max_digits=19, decimal_places=10)
따라서이 데이터에 액세스해야 할 때는 관련 이름 만 사용할 수 있습니다
bom = material.tomaterial.all().order_by('-creation_time')
그렇지 않으면 작동하지 않습니다 (적어도 같은 테이블에 2 FK의 경우 관련 이름의 사용법을 건너 뛸 수 없었습니다).
related_name
더 복잡한 관련 클래스 이름이있는 경우 인수가 유용합니다. 예를 들어 외래 키 관계가있는 경우 :
class UserMapDataFrame(models.Model):
user = models.ForeignKey(User)
UserMapDataFrame
related에서 객체 에 액세스하기 위해 User
기본 호출은 User.usermapdataframe_set.all()
읽기가 매우 어렵습니다.
를 사용하면 related_name
더 단순하거나 읽기 쉬운 이름을 지정하여 역 상관 관계를 얻을 수 있습니다. 이 경우을 지정 user = models.ForeignKey(User, related_name='map_data')
하면 호출은 User.map_data.all()
입니다.
관련 이름 매개 변수는 실제로 옵션입니다. 설정하지 않으면 Django가 자동으로 관계의 다른 쪽을 만듭니다. 지도 모델의 경우 Django는 map_set
속성 을 생성 m.map_set
하여 예제 를 통해 액세스 할 수 있습니다 (m은 클래스 인스턴스 임). Django가 사용하는 공식은 모델 이름과 문자열 _set
입니다. 따라서 관련 이름 매개 변수는 새로운 동작을 제공하지 않고 Django의 기본값을 무시합니다.
참고 URL : https://stackoverflow.com/questions/2642613/what-is-related-name-used-for-in-django
'Programing' 카테고리의 다른 글
퍼블릭 필드와 자동 속성 (0) | 2020.03.05 |
---|---|
python unittest-assertRaises의 반대? (0) | 2020.03.05 |
Jackson의 ObjectMapper를 정적 필드로 선언해야합니까? (0) | 2020.03.05 |
자바와 SQLite (0) | 2020.03.05 |
O (1 / n) 알고리즘이 있습니까? (0) | 2020.03.05 |