2

我正在尝试在表格中显示复杂的 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。并自己手动完成,但有什么更简单的吗?

4

0 回答 0