다른 답변에서 보지 못한 것을 추가하고 싶었습니다.
파이썬 클래스와 달리 필드 이름 숨기기는 허용되지 않습니다. 모델 상속 .
예를 들어 다음과 같은 사용 사례에 대한 문제를 실험했습니다.
나는 django의 인증 PermissionMixin 에서 상속받은 모델을 가지고 있습니다 .
class PermissionsMixin(models.Model):
"""
A mixin class that adds the fields and methods necessary to support
Django's Group and Permission model using the ModelBackend.
"""
is_superuser = models.BooleanField(_('superuser status'), default=False,
help_text=_('Designates that this user has all permissions without '
'explicitly assigning them.'))
groups = models.ManyToManyField(Group, verbose_name=_('groups'),
blank=True, help_text=_('The groups this user belongs to. A user will '
'get all permissions granted to each of '
'his/her group.'))
user_permissions = models.ManyToManyField(Permission,
verbose_name=_('user permissions'), blank=True,
help_text='Specific permissions for this user.')
class Meta:
abstract = True
그럼 난 무엇보다도 나는 그것이 무시하고 싶어 내 믹스 인이 있었다 related_name
의 groups
필드. 그래서 거의 다음과 같았습니다.
class WithManagedGroupMixin(object):
groups = models.ManyToManyField(Group, verbose_name=_('groups'),
related_name="%(app_label)s_%(class)s",
blank=True, help_text=_('The groups this user belongs to. A user will '
'get all permissions granted to each of '
'his/her group.'))
나는 다음과 같이이 두 가지 믹스 인을 사용했습니다.
class Member(PermissionMixin, WithManagedGroupMixin):
pass
네, 이것이 작동 할 것으로 예상했지만 작동하지 않았습니다. 그러나 문제는 더 심각했습니다. 제가받은 오류가 모델을 전혀 가리 키지 않았기 때문에 무엇이 잘못되었는지 전혀 몰랐습니다.
이 문제를 해결하는 동안 무작위로 믹스 인을 변경하고 추상 모델 믹스 인으로 변환하기로 결정했습니다. 오류가 다음과 같이 변경되었습니다.
django.core.exceptions.FieldError: Local field 'groups' in class 'Member' clashes with field of similar name from base class 'PermissionMixin'
보시다시피이 오류는 무슨 일이 일어나고 있는지 설명합니다.
내 의견으로는 이것은 큰 차이였습니다. :)