django에서 사용자 모델에 두 개의 외래 키를 추가할 수 없습니다.

히만슈 포다르

추가 정보를 저장하기 위해 확장한 사용자 모델이 있습니다. 이제 사용자 테이블의 열과 관련된 두 개의 키(외부)가 있는 부서 테이블이 있습니다. 하지만 오류가 발생합니다.

이것은 내가 시도한 것입니다

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_fieldrelated_name. 나는 related_name을 모델에서 to_field와 혼동했습니다.

다니엘 로즈만

오류에서 알 수 있듯이 related_name 은 에 대한 이름과 Profile.manager_username충돌합니다 Department.tech_lead. 그 중 하나를 변경하여 동일하지 않도록 합니다.

(물론 당신의 모델링은 상당히 이상합니다. 확실히 기술 리더는 둘 이상의 부서를 담당할 수 없습니까? 따라서 관계는 일대일이어야 합니다. 그리고 프로필을 관리자에게 명시적으로 연결하는 대신 관리자에게 연결하는 이유는 무엇입니까? 부서?)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

개체에서 외래 키를 사용할 수 없습니다.

두 개의 기본 키가 설정된 테이블에 대해 외래 키를 생성할 수 없습니다.

Django에서 한 모델의 두 필드에 두 개의 외래 키를 어떻게 할당합니까?

Django, 동일한 모델에 두 개의 외래 키 추가

MIPS에서 두 개의 32 비트 숫자를 추가 할 수 없습니다.

Android kotlin에서 두 개의 숫자를 추가할 수 없습니다.

MySql에서 외래 키를 추가 할 수 없습니다.

Laravel에서 외래 키를 추가 할 수 없습니다.

Laravel에서 외래 키를 추가할 수 없습니다.

하나의 모델에 두 개의 가드를 사용할 수 있습니까?

외래 키를 사용하여 Django 모델에 추가할 항목 수 제한

Django : 모델의 사용자에 대한 두 개의 외래 키, 페이지를로드 한 사용자가 아닌 키 가져 오기

강력한 매개 변수를 사용하여 Rails 4의 Devise 사용자 모델에 사용자 정의 필드를 추가 할 수 없습니다.

모델 클래스의 ICollection에 요소를 추가하거나 데이터베이스의 외래 키를 업데이트할 수 없습니다.

배열에 사용자 정의 클래스를 추가 할 수 없습니다.

라 라벨은 외래 키로 서로 연결된 두 개의 테이블을 사용할 수 없습니다.

manytomany 관계는 Django에서 두 개의 외래 키를 가질 수 있습니까?

외래 키를 사용하여 모델에 새 개체 추가

Django Rest Framework의 부모 테이블에서 CRUD를 수행하기 위해 외래 키가있는 모델의 serializer를 사용합니다.

Django에서 외래 키를 사용하여 관련 모델 데이터에 액세스할 수 없음

Django 모델에는 자신에 대한 외래 키가 있습니다. 자녀 수를 알고 싶습니까?

Django : 외래 키 관계가있는 모델을 삭제할 때 'str'개체를 호출 할 수 없습니다.

SQL에서 외래 키를 추가 할 수 없습니까?

두 개의 외래 키 최대 타임 스탬프를 비교하기 위해 모델에서 사용자 지정 함수 만들기

Java를 사용하여 sqlite에 외래 키 제약 조건을 추가할 수 없습니다.

한 테이블에 두 개의 외래 키를 사용하여 다른 열의 동일한 열을 참조 할 수 있습니까?

한 모델에서 동일한 모델을 참조하는 두 개의 외래 키 인스턴스를 만들 수 있습니까?

두 개의 개별 컴퓨터에있는 두 명의 로컬 사용자가 SSH 키를 사용하여 암호없이 인증 할 수 있습니까?

django 사용자 정의 템플릿 필터의 인수에서 모델의 개체를 전달할 수 없습니다.

TOP 리스트

뜨겁다태그

보관