調査に django のフォーム ウィザードを使用しています。調査全体を単一のモデルに保存したいと考えています。FormWizard の各ステップでモデルのサブセットを使用するために、モデルを複数のフォームに分割しました。問題は、最後にそれらをどのように結合するかです。私のmodels.pyは次のようになります:
class BigSurvey(models.Model):
field1 = models.TextField()
field2 = models.TextField()
...
field40 = models.CharField(max_length=10)
私のforms.pyは次のようなものです:
class FirstPageForm(ModelForm):
class Meta:
model = BigSurvey
fields = ('field1', 'field2')
class SecondPageForm(ModelForm):
class Meta:
model = BigSurvey
fields = ('field3', 'field4')
合計 4 つのフォームと 30 のフィールドについても同様です。サブクラス化された各モデル フォームのフィールドを組み合わせると、BigSurvey モデルのすべてのフィールドになります。
これにより、BigSurvey を 4 つのステップに分けることができます。フォーム ウィザードは、4 つのフォーム (FirstPageForm、SecondPageForm など) のそれぞれのリストであるオブジェクト form_list を返します。
これら 4 つのフォームを単一の BigSurvey オブジェクトに結合して保存するにはどうすればよいですか?
更新: フォームとフィールドを反復処理し、新しいフォームに値の辞書を入力することで解決しました。setattr を使用して入力すると (以下の Colleen の回答に従って)、バインドされていない形式になります。私の作業ソリューション:
newvalues={}
for form in form_list:
for field in form.cleaned_data.keys():
newvalues[field]=form.cleaned_data[field]
newform = QuestForm(newvalues)
newform.save()