Django管理后台中内联表单的两个外键

0 投票
1 回答
1361 浏览
提问于 2025-04-16 08:57

我想在管理后台的一个内联表单中使用两个外键。

我有一个“工时表”模型,里面有以下字段:

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

如果“工时表”是父模型,而“日期工时表”是子模型(或者反过来),那么就不需要复合键,只需做以下几点:

  1. 在两个模型中,把“主管”设置为外键,指向“用户”模型。
  2. 在子模型的表单中省略“主管”字段
  3. 在保存时,通过重写保存表单集的方法,把它的值设置为父模型中的字段值。

记住:

InlineModelAdmin和ModelAdmin有很多相同的功能,还增加了一些自己的功能(这些共享的功能实际上是在BaseModelAdmin这个父类中定义的)。

撰写回答