1

私はモデルフォームを持っており、そのフォームに (モデルには存在しない) 追加のフィールドを作成しています。

docsにあるように、モデルフォームのフィールドを並べ替えることができることを知っています。

しかし問題は、追加のフィールドを他のフィールドの前にレンダリングしたいということです。

レンダリングする前に、フォームのフィールドを何らかの方法で並べ替えることができますか? フォーム オブジェクトはフィールドの順序をどのように追跡しますか?

アラン

4

3 に答える 3

1

どんなに。私はすでに答えを見つけたようで、2つの追加フィールドを追加したので、これはうまくいくようです:

    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)

        self.build_fields()
        l = len(self.fields.keyOrder)
        for i in range(0,2):
            f = self.fields.keyOrder[l-1]
            self.fields.keyOrder.pop(l-1)
            self.fields.keyOrder.insert(0, f)

上記は私の最初の修正でした。後で私はそれがもうカットされていないことを知りました. それから私はこれをしました:

class AlertForm(forms.ModelForm):
    class Meta:
        model = Message
        fields = model_fields

    def __init__(self, *args, **kwargs):
        super(AlertForm, self).__init__(*args, **kwargs)

        self.build_fields()
        newKeyOrder = []
        newKeyOrder.append('field_that_had_to_be_first')
        if typechange:
            newKeyOrder.append('field_thats_sometimes_necessary')
        newKeyOrder += model_fields 
        self.fields.keyOrder = newKeyOrder
于 2012-12-03T15:23:32.527 に答える
-1

ModelForm の Meta クラスの fields 属性は、どのフィールドをどの順序で表示するかを定義します。

ModelForm の内部 Meta クラスの fields 属性を使用します。この属性を指定する場合、フォームに含めるフィールド名のリストにする必要があります。そのリストでフィールド名が指定されている順序は、フォームがそれらをレンダリングするときに尊重されます。

于 2012-12-03T15:24:21.143 に答える