2016-09-12 6 views
0

標準のジャンゴフォームのフィールドのレンダリングの順序を変更しようとしています。フォームは基本フォームから継承し、それを基に構築されます。django非モデルフォーム - 継承されたフォームのフィールドを注文するためのメタの使用

Metafieldsを使用してモデルフォームのフィールドを並べ替えたり指定したりするのと同様に、継承されたフォームのフィールドを並べ替えることができます。 (例えば:)

class SignupForm(allauthforms.SignupForm): 

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

    class Meta: 
     fields = ['email', 'password2'] 

答えて

3

のようなものだけModelForm秒間動作し、定期的なFormクラスのための何の効果もありませんMetaクラスを定義します。あなたがDjangoの1.9以降を使用している場合

は、あなたがDjangoの古いバージョンのためfield_order属性

class SignupForm(allauthforms.SignupForm): 
    field_order = ['email', 'password2'] 

を定義することができ、あなたはフィールド属性を変更する必要があります。

class SignupForm(allauthforms.SignupForm): 

    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 
     self.fields = OrderedDict([ 
      ('email', self.fields['email']), 
      ('password2', self.fields['password2']) 
     ]) 

また、個々のフォームフィールドをテンプレートの順序で並べ替えることもできます。

+0

明確な回答をいただきありがとうございます。 – Yunti

1

フォームをレンダリングするときは、Form.field_orderを使用できます。これはdjango以来利用可能です1.9

あなたがしなければならないのは、順序付けられたフィールド名でリストを渡すことだけです。

関連する問題