Django动态形式&字段排序

时间:2013-06-30 11:28:32

标签: django forms

我有一张表格,可以将“门票”记录到某个部门。

这是一个动态表单,根据表单类别/部门有其他自定义字段。

每张票都有标准字段,例如标题,日期,内容。有些字段名为custom_acbdef,允许部门在表单上提出其他问题。

这些附加字段始终显示在表单的底部,此刻可以正常显示。 (我添加模型表单然后循环通过其他字段并将它们添加到self.fields)

现在,我想添加一个名为“PDF附件”的附加标准字段,但我希望它始终显示在表单的底部。目前的问题是所有标准字段都显示在顶部,自定义字段显示在底部。

class Meta:
    model = Ticket
    fields = ('ticket_category','ticket_branch','ticket_content', 'ticket_attachment1')

所以在上面,我希望所有人都在ticket_content和ticket_attachment之间插入我的所有自定义字段。我有什么想法可以做到这一点?所有自定义表单字段都具有动态字段名称,但始终以“custom_”

开头

1 个答案:

答案 0 :(得分:1)

当我的表单__init__中的内容开始变得无法管理时,我通常采用以下方法之一:

创建工厂

利用闭包,编写一个函数来动态构建fields,然后返回该类。

def TicketForm():
    fields = ['title', 'date', 'content']

    for custom_field in custom_fields:
        fields.append(custom_field)

    fields.append('ticket_content')
    fields.append('ticket_attachment1')

    class _TicketForm(forms.ModelForm):
        class Meta:
            model = Ticket
            fields = fields

    return _TicketForm

多种形式

我将根据用例创建几种不同的表单,然后在我的视图中确定应该返回哪一种。 I posted an example of this yesterday.

进一步阅读James Bennett(django core dev)关于动态表格的check out a post