【问题标题】:multiple foreign keys in intermediate table of same table DJANGO同一表 DJANGO 的中间表中的多个外键
【发布时间】:2020-08-05 03:22:31
【问题描述】:

在与中间表的多对多关系中,我使用多个外键。但有错误 该模型被“examples.Employee.designation”用作中间模型,但它有多个来自“Employee”的外键,这是不明确的。您必须通过 through_fields 关键字参数指定 Django 应该使用哪个外键 我的模型带有中间表

class Employee(models.Model):
    code = models.CharField(max_length = 256)
    designation =models.ManyToManyField(Designation,related_name='+',through = 'HRManagement',blank=True)
    status = models.BooleanField(default = True)
    join_date = models.DateField(default=datetime.datetime.now)
    leave_date = models.DateField(blank = True, null=True)
    username = models.CharField(max_length = 256)
    password = models.CharField(max_length = 256)
    first_name = models.CharField(max_length = 256)
    last_name = models.CharField(max_length = 256)
    address = models.TextField()

class Designation(models.Model):
    name = models.CharField(max_length = 256)

class HRManagement(models.Model):
    employee = models.ForeignKey(Employee, related_name = 'employee', null=True,on_delete=models.CASCADE)
    designation = models.ForeignKey(Designation, on_delete=models.CASCADE,default=None,null=True)
    reportto = models.ForeignKey(Employee, null=True, related_name='reportto',on_delete=models.CASCADE)

我该如何解决这个错误?请帮助我建立模型

【问题讨论】:

    标签: django-models


    【解决方案1】:

    直通模型 (HRManagement) 包含两个 ForeignKeys 到同一个模型(Employeeemployeereportto 链接到),这是不明确的。这就是through_fields 的用途。

    尝试将through_fields=('employee', 'designation') 添加到designation,以便将字段声明为:

    designation = models.ManyToManyField(Designation, related_name='+', through='HRManagement', blank=True, through_fields=('employee', 'designation'))
    

    As a different answer in a different question points outthrough_fields中的字段顺序为(source, destination)。如果交换,makemigrations 会出错并显示 E339

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      • 2012-03-15
      • 2019-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-27
      相关资源
      最近更新 更多