1

James Bennett の役立つ投稿http://www.b-list.org/weblog/2008/nov/09/dynamic-forms/の最後に記載されているように、動的フォームを作成するためのファクトリ関数を作成しました。

フォームは完璧に機能しますが、辞書であるという事実のために (私は推測します)、アイテムはややランダムに見える順序で表示されfieldsます (以下のコード サンプルを参照してください)。フォーム フィールドの表示順序を定義するにはどうすればよいですか?

def make_form(assessment):
    '''
    Factory function to build and return dynamic AssessmentForms
    '''
    entries = assessment.entry_set.all()

    fields = {}

    for entry in entries:
        fields[entry.name] = forms.ChoiceField(
            required=False,
            initial=entry.rating,
            choices=CHOICES,
            widget=forms.RadioSelect()
        )

    return type('AssessmentForm', (forms.BaseForm,), { 'base_fields': fields })
4

2 に答える 2

2

富田裕二 そうです。たとえば、次のように使用できます。

from django.utils.datastructures import SortedDict

fields = SortedDict()

for entry in entries:
    fields[entry.name] = forms.ChoiceField(
        required=False,
        initial=entry.rating,
        choices=CHOICES,
        widget=forms.RadioSelect()
    )
于 2013-01-24T11:03:48.513 に答える
1

SortedDict(2.7以降のdjangos実装OrderedDict)を使用します

https://github.com/django/django/blob/master/django/utils/datastructures.py

于 2013-01-24T09:59:44.150 に答える