Modelform中任意数量的字段

时间:2017-02-17 21:21:23

标签: python django django-models django-forms

首先请原谅我的英语,这不是我的母语。

我需要构建一个表,例如,每行1000行和5个单元格,所以我决定使用Cell和Row模型。

models.py

class Cell(models.Model):
    content = models.CharField(max_length=100)
    row = models.ForeignKey('Row')

class Row(models.Model):
    pass

表格单元格的内容并不重要(在当前阶段,我用随机数据填充它)。

我需要的是能够添加新行。表单应该在每个单元格中都有一个输入字段(它的性质绝对不可忽略)。我更喜欢使用Modelform:

forms.py

class RowForm(forms.ModelForm):
    class Meta:
        model = Row
        fields = ??? <- problem here.

如何获得为每个单元格提供输入字段的Modelform(请记住,将来可能会更改单元格的数量)?我希望我已经非常清楚地表达了我的需求。非常感谢!

2 个答案:

答案 0 :(得分:1)

你在想这个。在数据库说话中,单元格是列和行相交的位置。实际上,你不需要创建一个称为单元格的模型。你所需要的只是

class Row(models.Model)
    col1 = models.SomeField()
    col2 = models.SomeField()
    col3 = models.SomeField()
    col4 = models.SomeField()

答案 1 :(得分:0)

我通过以下代码得到了我所需要的东西:

<强> forms.py

class RowForm(forms.Form):
    cell = forms.CharField(label='Ячейка', max_length=100)


class RowFormSet(BaseFormSet):
    min_num = 5
    max_num = 5
    absolute_max = 5
    extra = 0
    form = RowForm
    can_order = False
    can_delete = False
    validate_max = False
    validate_min = False

    def __init__(self, *args, **kwargs):
        super(RowFormSet, self).__init__(*args, **kwargs)
        for i in range(0, NUMBER_OF_CELLS):
            self[i].fields['cell'].label += " %d" % (i + 1)