我正在尝试在表格中显示复杂的 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 中的每个对象都有许多 Children - 在本例中为 20 个。CHOICES1、CHOICES2 和 CHOICES3 的每个组合都有一个实例。我想要一个表格来编辑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 是表单集中的var
表单域,表单集中的每个表单有一个表格单元格。
|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)。
我可以遍历这些并在每个第三个单元格之后插入一个。但我真的不希望输入混淆(即表单提交时会发生什么错误 - 我如何确保表单集中表单的正确顺序?)
我可以对其进行硬编码,但是随着项目的进行,选择的数量可能会有所不同。
那么处理这个问题的最佳方法是什么?我的一个想法是避免使用模型表单并创建另一个包含 20 个字段的表单,称为 1.1.1 到 3.3.3。并自己手动完成,但有什么更简单的吗?