Python 无法在django中向用户模型添加两个外键
我有一个用户模型,我扩展它来存储额外的信息。现在我有一个department表,它有两个键(外键),这两个键将与user表中的列相关。但是我犯了一个错误 这就是我尝试过的 型号.pyPython 无法在django中向用户模型添加两个外键,python,django,django-models,backend,django-users,Python,Django,Django Models,Backend,Django Users,我有一个用户模型,我扩展它来存储额外的信息。现在我有一个department表,它有两个键(外键),这两个键将与user表中的列相关。但是我犯了一个错误 这就是我尝试过的 型号.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
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)
错误消息
错误:
但是当我是tech\u lead=models.ForeignKey(User,blank=True,null=True,related\u name='usernames',on\u delete=models.DO\u NOTHING)
。一切正常。谁能告诉我哪里出了问题。只有当我在数据库中添加了departments模型时,这个问题才出现,否则用户模型工作得很好
编辑:正如我在评论中指出的那样,我把
to_字段
和相关的_名称
搞混了。我混淆了模型中的相关\u名称与\u字段。正如错误所述,配置文件的相关\u名称。经理\u用户名
与部门的相关\u名称冲突。技术负责人
。更改其中一个,使其不相同
(尽管我必须说,你的建模很奇怪。一个技术负责人肯定不能负责多个部门?因此这种关系应该是一对一的。为什么要将个人资料明确链接到经理,而不是部门?如何指定与另一个表中的列相关的外键?我以为你的名字也一样,我不知道你的意思。ForeignKey是指向另一个模型的字段
related_name
是允许您从另一个模型返回到此模型的属性。
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'.