2017-04-20 9 views
0

私はFormViewModelFormをつけて特定のモデルを作成しました。Django CBV:フィールドサブセットの再利用フォーム

ここで、そのモデルを編集できるようにしたいのですが、フィールドのサブセットのみを変更することができるため、これらのモデルのみで検証が実行され、他のモデルでは実行されません「必須」などと表示されます)。

このシナリオでは、既存のModelFormを再利用することはできますか、または新しいフォームをすべて作成する必要がありますか?

+0

一つの解決策は、あなたの 'ModelForm'をサブクラス化し、その' Meta'を再定義することです。またはフォームの必須フィールドをフォームの '__init__'に定義し、必要なフィールドにインスタンス化します –

+0

あなたの質問は私には不明です。「モデル」では「インスタンス」を意味しないのですか? – vmonteco

+0

@vmontecoもちろん、フォームの保存が実行されると、インスタンスとdbエントリを意味します。 – dabadaba

答えて

1

「フラグ」を渡すと、どのフィールドを別の方法で扱うかをフォームに伝えることができます。

のコード例では、より多くの意味を行います:

# 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 
+0

ああ、私はこのアプローチが好きです。ありがとうございました。 – dabadaba

関連する問題