我正在尝试在表格中显示复杂的modelForm formset。我的模型是这样的:
class Parent(models.Model):
# whatever
pass
class Child(models.Model):
CHOICES1 = (1,2,3)
CHOICES2 = (1,2)
CHOICES3 = (1,2,3,4)
parent = models.ForeignKey('Parent')
one = models.CharField(max_length=1, choices=CHOICES1)
two = models.CharField(max_length=1, choices=CHOICES2)
three = models.CharField(max_length=1, choices=CHOICES3)
var = models.CharField(max_length=64)
... Parent中的每个对象都有很多子对象 - 在本例中为20. CHOICES1,CHOICES2和CHOICES3的每个组合有一个实例。我希望有一个表单来编辑给定Parent的每个Child上的字段var
。所以我的表格看起来像这样:
class ChildForm(forms.ModelForm):
class Meta:
model = Child
hidden = ('parent', 'one', 'two', 'three')
# i.e. only var is the only visible form field.
children_formset = modelformset_factory(Child, form=ChildForm)
我可以循环这个并制作一个包含1列和20行的漂亮表格,但是如何制作一个这样的正方形,例如其中“1”和“2”只是标签,但var1.1.1 ... var3.3.3是formset中的var
形式字段,formset中每个表单有一个表格单元格。
|CHOICE1 | CHOICE2 | CHOICE3.1 | CHOICE3.2 | CHOICE3.3
|=========================================================
| 1 | 1 | var1.1.1 | var1.1.2 | var1.1.3
| 1 | 2 | var1.2.1 | var1.2.2 | var1.2.3
| 2 | 1 | var2.1.1 | var2.1.2 | var2.1.3
| 2 | 2 | var2.2.1 | var2.2.2 | var2.2.3
| 3 | 1 | var3.1.1 | var3.1.2 | var3.1.3
| 3 | 2 | var3.2.1 | var3.2.2 | var3.3.3
(原谅ASCII)。
我可以遍历这些并在每个第3个单元格之后插入一个。但我真的不希望输入混淆(即表单上提交的内容有错误 - 我如何确保表单中表单的正确排序?)
我可以硬编码,但随着项目的进展,选择的数量可能会有所不同。
那么处理这个问题的最佳方法是什么?我的一个想法是避免使用模型表单并创建另一个包含20个字段的表单,称为1.1.1到3.3.3。并自己手动完成,但有什么更容易吗?