2

そのため、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_imagedone


アップデート:

追加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

4

1 に答える 1

2

必要になりますself.request

return render(self.request, 'wizard-done.html', {
        'form_data': [form.cleaned_data for form in form_list],  })
于 2013-07-26T21:32:20.320 に答える