私はFormView
にModelForm
をつけて特定のモデルを作成しました。Django CBV:フィールドサブセットの再利用フォーム
ここで、そのモデルを編集できるようにしたいのですが、フィールドのサブセットのみを変更することができるため、これらのモデルのみで検証が実行され、他のモデルでは実行されません「必須」などと表示されます)。
このシナリオでは、既存のModelForm
を再利用することはできますか、または新しいフォームをすべて作成する必要がありますか?
私はFormView
にModelForm
をつけて特定のモデルを作成しました。Django CBV:フィールドサブセットの再利用フォーム
ここで、そのモデルを編集できるようにしたいのですが、フィールドのサブセットのみを変更することができるため、これらのモデルのみで検証が実行され、他のモデルでは実行されません「必須」などと表示されます)。
このシナリオでは、既存のModelForm
を再利用することはできますか、または新しいフォームをすべて作成する必要がありますか?
「フラグ」を渡すと、どのフィールドを別の方法で扱うかをフォームに伝えることができます。
のコード例では、より多くの意味を行います:
# your view
class SpecialFormView(FormView):
# [...your view attributes..]
def get_form_kwargs(self):
kwargs = super(SpecialFormView, self).get_form_kwargs()
kwargs['is_special'] = True
return kwargs
# your form
class MyModelForm(ModelForm):
# [... your fields and meta..]
def __init__(self, *args, **kwargs):
is_special = kwargs.pop('is_special', False)
super(MyModelForm, self).__init__(*args, **kwargs)
if is_special:
for field in ['field_1', 'field_2']:
self.fields[field].required = False
ああ、私はこのアプローチが好きです。ありがとうございました。 – dabadaba
一つの解決策は、あなたの 'ModelForm'をサブクラス化し、その' Meta'を再定義することです。またはフォームの必須フィールドをフォームの '__init__'に定義し、必要なフィールドにインスタンス化します –
あなたの質問は私には不明です。「モデル」では「インスタンス」を意味しないのですか? – vmonteco
@vmontecoもちろん、フォームの保存が実行されると、インスタンスとdbエントリを意味します。 – dabadaba