Проверить / очистить FileField на немодельной форме в Django? - PullRequest
4 голосов
/ 07 октября 2010

В конечном итоге я пытаюсь проверить FileField по типу расширения.Но у меня возникают проблемы даже при получении метода очистки для этого поля для получения значения POST.

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>

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

1 Ответ

5 голосов
/ 07 октября 2010

Вы не передаете request.FILES в форму, когда создаете ее в посте.

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

См. документацию .

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

...