2010-12-01 4 views
1

ich eine Form haben, mit einem Bündel von Feldern, und dann habe ich ein:Django: nach form.is_valid Scheck, cleaned_data fehlt das Bildfeld

profile_image=forms.ImageField(required=False) 

Das Problem si, dass nach dem form.is_valid() überprüft,

form.cleaned_data.get('first_name') 

zum Beispiel DOES die tatsächlichen Namen zurückgeben, aber

form.cleaned_data.get('profile_image') 

NICHT anynthing zurückzukehren.

Im Druck (request.POST) -Ausgang, erhalte ich

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

aber im Druck (form.cleaned_data) i erhalten:

'profile_image': None 

Warum ist die Datei am is_valid verloren prüfen? Was soll ich machen?

UPDATE:

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 

und

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')? 

Auch wenn ich tun # 1) und # 2), i noch KEINE

Antwort

12

erhalten Stellen Sie sicher, die richtige enctype verwendet haben in Ihrem HTML-Formular:

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

Stellen Sie außerdem sicher, dass Sie request.FILES binden, wenn Sie das Formularobjekt erstellen.

# 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

Sie hatten Recht. Ich hatte das Multipart nicht. hinzugefügt. Aber ich bekomme das Verbindliche nicht zu sehr. Die Django-Erklärung scheint sehr unterschiedlich zu sein, was ich in meinem Code habe. Könntest du eine Zeile darüber schreiben, wie ich es nach dem neuen Code tun sollte, den ich im UPDATE eingefügt habe? das wäre wirklich toll – mgPePe

+0

Die mehrteiligen Daten werden in 'request.FILES' geschrieben, also müssen Sie sie an das Formular in # 1 für' is_valid' binden, um dieses Feld zu validieren. Ich bin mir über # 2 nicht sicher, da ich die Datei immer direkt aus 'request.FILES' entpacke, anstatt' cleaned_data.get (...) 'zu benutzen. Haben Sie' request.FILES' inspiziert, um zu sehen, ob Ihre Daten da sind ? –

+0

Hier ist dieses Dokument wahrscheinlich eine bessere Erklärung: http://docs.djangoproject.com/en/dev/topics/http/file-uploads/?from=olddocs –

Verwandte Themen