ModelForm
に表示されるフィールドを動的に変更することはできますか?ModelFormのフィールドを動的に変更する
私は、ユーザーが(フォームを追加を使用して)フロントエンドから(モデルの)新しいインスタンスを追加したときModelForm
内のフィールドのほんの数を表示しようとしていますが、フィールドの数が多いほど、ときに、ユーザーの編集インスタンス(編集フォームを使用)。そのdoesntの以来の追加および編集のための2つの別々のクラスを避けるためにしようと
class SchoolForm(ModelForm):
class Meta:
model = School
#want to change the fields below dynamically depending on whether its an edit form or add form on the frontend
fields = ['name', 'area', 'capacity', 'num_of_teachers']
widgets = {
'area': CheckboxSelectMultiple
}
labels = {
'name': "Name of the School",
'num_of_teachers': "Total number of teachers",
}
が生乾きようだ:
Formクラスは次のようになります。私はget_form()
機能を無効にすることができるadminページのために同じ質問のあるSOの投稿を見つけましたが、ここでは該当しません。
また、thisは、通常の方法として異なるクラスを使用し、動的フォームを代替として使用することを提案しています。おそらく、ダイナミクスフォームはここでの進歩ですが、完全にはわかりません(私はSchoolFormクラスで__init__()
とsave()
メソッドをオーバーライドしました)。
フォームを動的に作成するのが、ここでは '__init()__'と 'save()'のカスタムメソッドを使用するのが理想です。今のところ、私は上記のクラスの_edit form_に必要なフィールドを_all_指定することに頼っていました。_add form_にはこれらのサブセットが必要です。私はそれがそれを行う最も簡単な方法だと思った。オプションを探そうとしている人には、[this](https://stackoverflow.com/questions/297383/dynamically-update-modelforms-meta-class/297478#297478)と[this](http:// bradmontgomery。 blogspot.in/2009/04/dynamically-displaying-fields-in.html)投稿者 – Anupam