そのため、django-merlinからセッションベースのウィザードを接続できませんでしたが、djangoソースに含まれているウィザードで再試行しています。ただし、を使用してファイルをアップロードしようとするImageField
と、ファイルrequest.FILES
がフォームにバインドされていないようです。ファイルをアップロードしようとすると、「このフィールドは必須です」というエラーが発生するためです。これが私が持っているものです:
forms.py:
class StepOneForm(forms.Form):
year = forms.ChoiceField(choices=YEAR_CHOICES)
...
class StepTwoForm(forms.Form):
main_image = forms.ImageField()
...
class CreateWizard(SessionWizardView):
file_storage = FileSystemStorage(location=os.path.join(settings.MEDIA_ROOT))
def done(self, form_list, **kwargs):
d['main_image'] = request.FILES['main_image']
db = Thing(**d)
db.save()
return render(request, 'wizard-done.html', {
'form_data': [form.cleaned_data for form in form_list],
})
上記では、このスタックオーバーフローの質問で説明したように、メソッドCreateWizard
にを保存しようとしましたが、成功しませんでした。main_image
done
アップデート:
追加enctype=multipart/form-data
することでファイルをバインドできましたが、新しいエラーが発生します。
global name 'request' is not defined
リクエストコンテキストプロセッサが私の中にあるとしてもTEMPLATE_CONTEXT_PROCESSORS
。リンクされたstackoverflowの投稿のようにdoneメソッドを定義しても機能しませんでした:
class CreateWizard(SessionWizardView):
file_storage = FileSystemStorage(location=os.path.join(settings.MEDIA_ROOT))
def done(self, request, form_list):
結果としてTypeError: done expects 3 arguments, 2 given