django 2个外键从一个型号到另一个型号

时间:2010-12-22 22:45:17

标签: python django

有没有办法让一个模型中的2个外键与同一个模型有关。在这个例子中,我希望将Timesheet中的'date'和'supervisor'作为DateTimesheet的外键。我想要完成的是在管理员中使用时间表内联DateTimesheet,并且能够输入一次日期和主管,然后输入多个Timesheets内联,而无需为每个时间表输入日期或主管。

class DateTimesheet(models.Model):
    date = models.DateField()
    supervisor = models.ForeignKey(User)
    class Meta:
        verbose_name = 'Daily Timesheet'
        unique_together = (('date', 'supervisor'),)

    def __unicode__(self):
        return '%s | %s' % self.date.strftime("%A, %B %d.")

class Timesheet(models.Model):
    date = models.ForeignKey(DateTimesheet)
    supervisor = models.ForeignKey(DateTimesheet)
    job = models.ForeignKey(Job)
    phase = models.ForeignKey(Phase)
    equip = models.ForeignKey(Equipment, null=True, blank=True)
    employee = models.ForeignKey(Employee)
    local = models.ForeignKey(Local)
    pay_class = models.ForeignKey(PayClass)
    reg = models.IntegerField(max_length=1)
    ot = models.IntegerField(max_length=2, null=True, blank=True)
    bill_rate = models.DecimalField(decimal_places=2,max_digits=6, blank=True,null=True)
    bill_hours = models.IntegerField(max_length=2,blank=True,null=True,)

3 个答案:

答案 0 :(得分:8)

如果您必须在指向相同型号的一个型号上使用外键,则必须set fk_name on the corresponding inline admin

class DateInline(admin.TabularInline):
    model = DateTimeSheet
    fk_name = "date"

答案 1 :(得分:3)

是。为related_name提供不同的值。

答案 2 :(得分:0)

没问题。

您应该收到有关需要指定related_name的错误,并且该信息可以解决您的问题。

您必须指定models.ForeignKey(DateTimeSheet, related_name="something_else"),否则django会抱怨反向关系经理需要唯一的名称。

澄清一下:related_name是您在反向查询中使用的内容,例如:datetimesheet.timesheet_set.all()

当你有DateTimesheet的两个外键时,django需要能够区分两个外键。

相关问题