私はモデルフォームを持っており、そのフォームに (モデルには存在しない) 追加のフィールドを作成しています。
docsにあるように、モデルフォームのフィールドを並べ替えることができることを知っています。
しかし問題は、追加のフィールドを他のフィールドの前にレンダリングしたいということです。
レンダリングする前に、フォームのフィールドを何らかの方法で並べ替えることができますか? フォーム オブジェクトはフィールドの順序をどのように追跡しますか?
アラン
私はモデルフォームを持っており、そのフォームに (モデルには存在しない) 追加のフィールドを作成しています。
docsにあるように、モデルフォームのフィールドを並べ替えることができることを知っています。
しかし問題は、追加のフィールドを他のフィールドの前にレンダリングしたいということです。
レンダリングする前に、フォームのフィールドを何らかの方法で並べ替えることができますか? フォーム オブジェクトはフィールドの順序をどのように追跡しますか?
アラン
どんなに。私はすでに答えを見つけたようで、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
ModelForm の Meta クラスの fields 属性は、どのフィールドをどの順序で表示するかを定義します。
ModelForm の内部 Meta クラスの fields 属性を使用します。この属性を指定する場合、フォームに含めるフィールド名のリストにする必要があります。そのリストでフィールド名が指定されている順序は、フォームがそれらをレンダリングするときに尊重されます。