簡體   English   中英

無法在 django 中向用戶 model 添加兩個外鍵

[英]Unable to add two foreign keys to the user model in 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)

錯誤信息錯誤:

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)這一行。 一切正常。 誰能告訴我哪里出錯了。 只有當我在我的數據庫中添加部門 model 時才會出現這個問題,否則用戶 model 工作得很好。

編輯:正如評論中指出的那樣,我在to_fieldrelated_name之間感到困惑。 我將模型中的 related_name 與 to_field 混淆了。

正如錯誤所說, Profile.manager_username的相關名稱與Department.tech_lead的名稱沖突。 改變其中之一,使它們不一樣。

(雖然我必須說,你的建模很奇怪。當然,技術主管不能負責多個部門?所以這種關系應該是一對一的。為什么要明確地將個人資料鏈接到經理,而不是部門?)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM