问题描述
我找到了一种方法来处理作为外键相互连接的模型形式。
我正在寻找一个表单集,该表单集将创建一个相互之间具有 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。
这是怎么做到的?请帮助我为此苦苦挣扎了好几个月。如果需要,表单集本身已经准备好了,我可以在这里添加吗?
解决方法
所以解决方案其实很简单。到目前为止,我没有遵循它(意味着更新尚未经过测试),这是有效的:
SinglePrescriptionFormset = modelformset_factory(
PrescriptionLine,form=PrescriptionLineForm,fields='__all__',extra=1,can_delete=True
)
上面的错误有一个错误请注意:
line_prescription = models.ManyToManyField(PrescriptionLine)
它以这种方式工作,无需更改任何其他内容。