추가 정보를 저장하기 위해 확장한 사용자 모델이 있습니다. 이제 사용자 테이블의 열과 관련된 두 개의 키(외부)가 있는 부서 테이블이 있습니다. 하지만 오류가 발생합니다.
이것은 내가 시도한 것입니다
model.py
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
# Create your models here.
class Profile(models.Model):
STATUS_CHOICES = (
(1, ("Permanent")),
(2, ("Temporary")),
)
GENDER_CHOICES = (
(1, ("Male")),
(2, ("Female")),
(3, ("Not Specified"))
)
user = models.OneToOneField(User, on_delete=models.CASCADE)
emp_type = models.IntegerField(choices=STATUS_CHOICES, default=1)
contact = models.CharField(max_length=13, blank=True)
whatsapp = models.CharField(max_length=13, blank=True)
gender = models.IntegerField(choices=GENDER_CHOICES, default=3)
avatar = models.ImageField(upload_to='users/images', default='users/images/default.jpg')
manager_username = models.ForeignKey(User, blank=True, null=True, related_name='usernames', on_delete=models.DO_NOTHING)
def __str__(self):
return self.user.username
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
class Department(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=20, unique=True)
manager = models.ForeignKey(User, blank=True, null=True, related_name='manager_usernames', on_delete=models.DO_NOTHING)
tech_lead = models.ForeignKey(User, blank=True, null=True, related_name='usernames', on_delete=models.DO_NOTHING)
오류 메시지 ERRORS:
users.Department.tech_lead: (fields.E304) Reverse accessor for 'Department.tech_lead' clashes with reverse accessor for 'Profile.manager_username'.
HINT: Add or change a related_name argument to the definition for 'Department.tech_lead' or 'Profile.manager_username'.
users.Department.tech_lead: (fields.E305) Reverse query name for 'Department.tech_lead' clashes with reverse query name for 'Profile.manager_username'.
HINT: Add or change a related_name argument to the definition for 'Department.tech_lead' or 'Profile.manager_username'.
users.Profile.manager_username: (fields.E304) Reverse accessor for 'Profile.manager_username' clashes with reverse accessor for 'Department.tech_lead'.
HINT: Add or change a related_name argument to the definition for 'Profile.manager_username' or 'Department.tech_lead'.
users.Profile.manager_username: (fields.E305) Reverse query name for 'Profile.manager_username' clashes with reverse query name for 'Department.tech_lead'.
HINT: Add or change a related_name argument to the definition for 'Profile.manager_username' or 'Department.tech_lead'.
그러나 내가 tech_lead = models.ForeignKey(User, blank=True, null=True, related_name='usernames', on_delete=models.DO_NOTHING)
이 선일 때 . 모든 것이 잘 작동합니다. 아무도 내가 어디에서 잘못 가고 있는지 말해 줄 수 있습니까? 이 문제는 데이터베이스에 부서 모델을 추가했을 때만 발생했으며 그렇지 않으면 사용자 모델이 잘 작동합니다.
편집 : 의견에서 지적했듯이 나는 to_field
와 related_name
. 나는 related_name을 모델에서 to_field와 혼동했습니다.
오류에서 알 수 있듯이 related_name 은 에 대한 이름과 Profile.manager_username
충돌합니다 Department.tech_lead
. 그 중 하나를 변경하여 동일하지 않도록 합니다.
(물론 당신의 모델링은 상당히 이상합니다. 확실히 기술 리더는 둘 이상의 부서를 담당할 수 없습니까? 따라서 관계는 일대일이어야 합니다. 그리고 프로필을 관리자에게 명시적으로 연결하는 대신 관리자에게 연결하는 이유는 무엇입니까? 부서?)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다