Django管理后台中内联表单的两个外键
我想在管理后台的一个内联表单中使用两个外键。
我有一个“工时表”模型,里面有以下字段:
class Timesheet(models.Model):
date = models.ForeignKey(DateTimesheet, related_name="day")
supervisor = models.ForeignKey(DateTimesheet, related_name="superintendent")
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,)
还有一个“日期工时表”,它有这些字段:
class DateTimesheet(models.Model):
date = models.DateField()
supervisor = models.ForeignKey(User)
我希望能够选择日期和主管,然后在内联表单中显示其余的工时表字段。看起来我需要一个复合键,但根据我所了解的,Django 不支持复合键。这到底有可能实现吗,还是说我没戏了?
1 个回答
1
如果“工时表”是父模型,而“日期工时表”是子模型(或者反过来),那么就不需要复合键,只需做以下几点:
- 在两个模型中,把“主管”设置为外键,指向“用户”模型。
- 在子模型的表单中省略“主管”字段。
- 在保存时,通过重写保存表单集的方法,把它的值设置为父模型中的字段值。
记住:
InlineModelAdmin和ModelAdmin有很多相同的功能,还增加了一些自己的功能(这些共享的功能实际上是在BaseModelAdmin这个父类中定义的)。