2010-10-07 4 views
4

В конечном итоге я пытаюсь проверить FileField по типу расширения. Но у меня возникают проблемы даже с получением чистого метода для этого поля, чтобы получить значение POSTED.Подтвердить/очистить FileField в немодельной форме в Django?

from django.forms.forms import Form 
from django.forms.fields import FileField 
from django.forms.util import ValidationError 

class TestForm(Form):   
    file = FileField(required=False) 

    def clean_file(self): 
     value = self.cleaned_data["file"] 
     print "clean_file value: %s" % value 
     return None  

@localhost 
def test_forms(request): 
    form = TestForm()  
    if request.method == "POST": 
     form = TestForm(request.POST)   
     if form.is_valid(): 
      print "form is valid" 
    return render_to_response("test/form.html", RequestContext(request, locals())) 

Когда я запускаю код, я получаю следующий результат:

clean_file value: None 
form is valid 

Другими словами, метод clean_file не может получить данные файла. Аналогично, если он возвращает None, форма остается действительной.

Вот моя форма HTML:

<form enctype="multipart/form-data" method="post" action="#"> 
    <input type="file" id="id_file" name="file"> 
    <input type="submit" value="Save"> 
</form> 

Я видел couple snippets с solutions для этой проблемы, но я не могу заставить их работать с формой без модели. Они оба объявляют пользовательский тип поля. Когда я это делаю, у меня такая же проблема; вызов super() возвращает объект None.

+0

FYI - Я вижу объект InMemoryUploadFile в запросе. ФАЙЛЫ. –

ответ

4

Вы не передаете request.FILES в форму при создании экземпляра в сообщении.

form = TestForm(request.POST, request.FILES) 

См. the documentation.

Также обратите внимание, что вы создаете экземпляр формы дважды на POST, что не является необходимым. Перенесите первый в предложение else в конце функции (на том же уровне, что и if request.method == 'POST').

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