Использование FileField в FormWizard (Django 1.3) - PullRequest
1 голос
/ 18 февраля 2012

Я пытаюсь использовать Django 1.3 FormWizard для загрузки файла в 2 этапа: 1. Только FileField 2. Если файл был правильно загружен и действителен (после пользовательской проверки), предложите дать ему имя и описание.

Следуя документации, я написал:

class CreateCheckWizard(FormWizard):
    def done(self, request, form_list):
        return HttpResponseRedirect('/my_checks/')
    def get_template(self, step):
        return ['create_check_%s.html' % step, 'create_check_1.html']

class CreateCheckForm1(forms.Form):
    my_file = forms.FileField()

class CreateCheckForm2(forms.Form):
    title = forms.CharField(max_length=255)

Я добавил multipart / form-data в тег FORM в шаблоне: <form enctype="multipart/form-data" action="." method="post">

Однако даже если я загружаю файл, я получаю сообщение об ошибке «Это поле обязательно для заполнения».

Полагаю, форма создается без поля request.FILES. Как мы можем изменить это поведение для успешной загрузки файлов в FormWizard?

Редактировать: Глядя на исходный код Django, он действительно создает формы, используя form(request.POST) вместо form(request.POST, request.FILES), как это должно быть для обработки файлов. Любой способ загрузки файлов без изменения исходного кода?

1 Ответ

5 голосов
/ 18 февраля 2012

Это невозможно в мастере форм Django 1.3.Из документов Мастер форм Django :

Важное ограничение: Поскольку мастер использует скрытые поля HTML для хранения данных между страницами, вы не можете включать FileFieldв любой форме, кроме последней

Это возможно с помощью мастера форм Django 1.4 (см. Обработка файлов документов ).Если вы используете Django 1.3, вы можете установить новый мастер форм как отдельное приложение .

...