この質問は、以前に尋ねられ、ここで回答されたものと非常に関連しています: How wrap a FormWizard in a View?
login_required デコレータを使用できるように、Django フォーム ウィザードをビューにラップする方法の正確な詳細を投稿できますか? このトピックについてはインターネット上で多数の議論がありますが、フォーム ウィザード クラスをどのように定義したかが実際には示されていないため、それらはすべて不完全なようです。
ブラウザをビューに向けて実行すると、次の例外が発生します。
__init__() takes exactly 1 non-keyword argument (2 given) in views.py line #108
このエラーが発生しないようにフォーム ウィザード オブジェクトをインスタンス化するときに渡す引数は何ですか? 動作するサンプルコードがあれば、投稿してください。
これが私のurls.pyファイルの内容です:
url(r'^createObject/$', views.createObjectView, name='createObject'),
これが私のviews.pyファイルの内容です:
CREATE_OBJECT_FORMS = [
("createMyForm0", createObjectForm0),
("createMyForm1", createObjectForm1),
("createMyForm2", createObjectForm2),
("createMyForm3", createObjectForm3),
]
CREATE_OBJECT_TEMPLATES = {
"createMyForm0": "myApp/form0.html",
"createMyForm1": "myApp/form1.html",
"createMyForm2": "myApp/form2.html",
"createMyForm3": "myApp/form3.html",
}
@login_required
def createObjectView(request):
# Set up the dictionary of initial data for the form
# In this case, we are pre-filling some data from the first form only
initial = {0: {}}
# Create the form wizard
form = createObjectWizard(
[
createObjectForm0,
createObjectForm1,
createObjectForm2,
createObjectForm3,
],
initial=initial # This is Line #108
)
# Call the form wizard passing through the context and the request
return form(context=RequestContext(request), request=request)
class createObjectWizard(SessionWizardView):
def get_template_names(self):
return [CREATE_OBJECT_TEMPLATES[self.steps.current]]
def done(self, form_list, **kwargs):
doSomethingFunction(form_list)
return HttpResponseRedirect('/objectCreated/')