2010-12-01 27 views
1

J'ai une forme, avec un tas de champs, puis j'ai un:Django: après vérification form.is_valid, cleaned_data manque le champ d'image

profile_image=forms.ImageField(required=False) 

Le problème Sí que, après la form.is_valid() vérifier,

form.cleaned_data.get('first_name') 

par exemple, ne retourne le nom réel, cependant,

form.cleaned_data.get('profile_image') 

ne retourne pas anynthing.

Dans l'impression (request.POST) sortie, i get

u'profile_image': [u'02 Portfolio Page.jpg'] 

mais dans l'impression (form.cleaned_data) i get:

'profile_image': None 

Pourquoi le fichier perdu au is_valid vérifier? Que devrais-je faire?

MISE À JOUR:

class NewChickForm(forms.Form): 
first_name = forms.CharField() 
last_name = forms.CharField() 
profile_image=forms.ImageField(required=False) 
def do_save(self): 
    u = Subject(
     first_name = self.cleaned_data.get('first_name'), 
     last_name = self.cleaned_data.get('last_name'), 
     profile_image = self.cleaned_data.get('profile_image'), 
    ) 
    print(self.cleaned_data) 
    u.save() 
    return u 

et

s = Subject() 
form = NewChickForm(request.POST) # 1)do i add here `request.FILES` ? 
if form.is_valid(): 
    s = form.do_save() 
      # 2) s.profile_image = form.cleaned_data.get('profile_image')? 

Même si je fais # 1) et 2), je reçois encore aucun

Répondre

12

Assurez-vous que vous avez utilisé le bon enctype sur votre formulaire HTML:

<form enctype="multipart/form-data" method="post" action="/foo/"> 

En outre, assurez-vous de lier request.FILES lorsque vous construisez l'objet de formulaire.

# Bound form with an image field, data from the request 
>>> f = ContactFormWithMugshot(request.POST, request.FILES) 

Binding uploaded files to a form

Edit:File Uploads

+0

Vous aviez raison. Je n'avais pas le multipart. ajoutée. Mais je n'obtiens pas trop la chose obligatoire. L'explication de django semble être très différente de ce que j'ai dans mon code. Pourriez-vous laisser tomber une ligne sur la façon dont je devrais le faire en fonction du nouveau code que j'ai collé dans la mise à jour? ce serait vraiment génial – mgPePe

+0

Les données multi-parties seront placées dans 'request.FILES', donc vous devez le lier au formulaire dans # 1 pour' is_valid' pour valider ce champ. Je ne suis pas sûr de # 2 comme je toujours extrait juste le fichier de 'request.FILES' directement au lieu d'utiliser' clean_data.get (...) 'Avez-vous inspecté' request.FILES' pour voir si vos données sont là ? –

+0

Ici, ce document est probablement une meilleure explication: http://docs.djangoproject.com/fr/dev/topics/http/file-uploads/?from=olddocs –