有没有办法让一个模型中的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,)
答案 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需要能够区分两个外键。