Django显示复杂的formset

时间:2013-04-06 11:30:50

标签: django formset

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

0 个答案:

没有答案