0

我有一个表格,用于将“票证”记录到部门。

它是一个动态表单,根据表单类别/部门具有额外的自定义字段。

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

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

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

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

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

4

2 回答 2

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

多种形式

我将根据用例创建几种不同的表单,然后在我的视图中确定应该返回哪一个。我昨天发布了一个例子。

如需进一步阅读,请查看James Bennett(django 核心开发人员)关于动态表单的帖子。

于 2013-06-30T14:07:33.583 回答
0

我知道这是一篇旧文章,但最近发布了一个可以实现此目的的包。

它允许动态定义新字段并以非常简单的方式将它们填充到表单和数据库中。

链接在这里

由undersat包的dinadata

于 2022-01-26T09:03:12.873 回答