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 に答える