J'essaie finalement de valider un FileField par type d'extension. Mais j'ai du mal à obtenir la méthode clean pour ce champ pour récupérer la valeur POSTed.Valider/nettoyer un FileField sur un formulaire non-modèle dans 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()))
Quand je lance le code, je reçois la sortie suivante:
clean_file value: None
form is valid
En d'autres termes, la méthode clean_file n'est pas en mesure d'obtenir les données du fichier. De même, s'il renvoie None, le formulaire est toujours valide.
Voici ma forme html:
<form enctype="multipart/form-data" method="post" action="#">
<input type="file" id="id_file" name="file">
<input type="submit" value="Save">
</form>
J'ai vu couple snippets avec solutions pour ce problème, mais je ne peux pas les amener à travailler avec une forme non-modèle. Ils déclarent tous deux un type de champ personnalisé. Quand je fais cela, j'ai le même problème; L'appel de super() renvoie un objet None.
FYI - Je vois l'objet InMemoryUploadFile dans request.FILES. –