2012-02-18 5 views
1

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

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

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) 

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

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

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

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

ответ

5

Это невозможно в мастере Django 1.3. Из Django form wizard docs:

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

Это возможно с мастером Django 1.4 (см. handling files docs). Если вы используете Django 1.3, вы можете установить мастер новой формы как separate app.

+0

Спасибо Alasdair. Я видел, что он был доступен на 1,4, но поскольку я использую 1.3, внешний плагин, который вы дали ссылке, именно то, что я искал, спасибо! – Thomas

Смежные вопросы