2017-03-09 23 views
1

おそらく簡単な質問ですが、django-formtoolsを使用してフォームのプレビューページを実装するのに問題があります。私はドキュメントごとにすべてを設定しました。私はdone()メソッドに何を追加して、データをdbに保存するかについています。Django FormPreview:データベースにフォームデータを保存

forms.py

class JobForm(ModelForm): 
    class Meta: 
     model = Job 
     fields = ('title', 'category', 'company', 'website', 'description',) 

class JobFormPreview(FormPreview): 
    def done(self, request, cleaned_data): 
     # add what here to save form data as object? 
     return HttpResponseRedirect('/success') 

urls.pyデフォルトのテンプレートを使用して

... 
url(r'^jobs/new/$', 
    JobFormPreview(JobForm), 
    name='job_form'), 
... 

。フォームとプレビューの両方がうまく表示されますが、明らかにデータは送信時に保存されません。試してself.form.save()this answerとしましたが、エラーsave() missing 1 required positional argument: 'self'が表示されます。

どのようなガイダンスもありがとうございます。

答えて

1

formtools codeを見ると、検証済みのフォームインスタンスではなく、self.formがフォームクラスであるかのように見えます。したがってself.form.save()は動作しません。私はlinked answerからself.form.save()に電話する提案を削除しました。

doneメソッドで検証済みのフォームに直接アクセスする方法はありません。代わりにcleaned_dataを使用してインスタンスを作成することをおすすめします。

class JobFormPreview(FormPreview): 
    def done(self, request, cleaned_data): 
     job = Job.objects.create(**cleaned_data) 
     return HttpResponseRedirect('/success') 
関連する問題