【问题标题】:Django InlineFormset with M2M Field带有 M2M 字段的 Django InlineFormset
【发布时间】:2020-12-22 20:58:52
【问题描述】:

我找到了一种方法来实现作为外键相互连接的模型形式。

我正在寻找一个表单集,它将创建一个相互之间具有 M2M 关系的动态表单,因此设计如下:

class PrescriptionLine(models.Model):
    id = models.AutoField(primary_key=True)
    drug = models.ForeignKey(Drug, on_delete=models.CASCADE)
    morning = models.FloatField(choices=[(val, val) for val in TABLET_INTAKE_QTY], default=0, blank=True, null=True)
 
class Prescription(models.Model):
    id = models.AutoField(primary_key=True)
    patient = models.ForeignKey(Patient, on_delete=models.CASCADE)
    line_prescription = models.ManyToManyField(PrescriptionLine, on_delete=models.CASCADE)
    note = models.TextField(max_length=100, default='')

现在我可以这样做了:

PrescriptionFormset = inlineformset_factory(
    Prescription, PrescriptionLine, form=PrescriptionForm,
    fields=['drug', 'morning'], extra=1, can_delete=True
    )

但我不能这样做,因为它说 PrescriptionLine 没有 ForeignKey to Prescription。

如何做到这一点?请帮助我已经为此苦苦挣扎了好几个月。如果需要,表单集本身已经准备好了,我可以在这里添加它吗?

【问题讨论】:

    标签: django many-to-many inline-formset


    【解决方案1】:

    所以解决方案其实很简单。到目前为止,我没有遵循它(意味着尚未测试更新):

    SinglePrescriptionFormset = modelformset_factory(
        PrescriptionLine, form=PrescriptionLineForm, fields='__all__', extra=1, can_delete=True
        )
    

    以上错误有一处请注意:

        line_prescription = models.ManyToManyField(PrescriptionLine)
    

    这样就可以正常工作,无需更改任何其他内容。

    【讨论】:

      猜你喜欢
      • 2018-12-21
      • 2014-01-02
      • 1970-01-01
      • 2013-02-05
      • 1970-01-01
      • 1970-01-01
      • 2020-09-19
      • 2019-12-30
      • 1970-01-01
      相关资源
      最近更新 更多