2009-03-25 14 views
42

Estoy seguro de que estoy haciendo algo realmente obviamente estúpido, pero he estado tratando de resolverlo durante unas horas y nada está saltando a mí.Django Imagefield no funciona correctamente a través de ModelForm

Estoy usando un ModelForm, por lo que puedo exponer algunos campos de un modelo para su edición. 2x ImageField, 1x TextField. El Formulario se procesa y TextField funciona. Los dos ImageFields no funcionan y es por eso que estoy aquí hoy.

estoy usando Django 1.0.2

Aquí está el código correspondiente (preguntar si necesita más - y no estoy incluyendo el HTML porque esa parte parece funcionar muy bien):

Modelo :

class Company(models.Model): 
    #... 
    logo = models.ImageField(upload_to='logos', blank=True) 
    intro_pic = models.ImageField(upload_to='intropics', blank=True) 
    intro_text = models.TextField(blank=True) 

Ver y forma:

def admin_edit(request, company_slug): 
    company = get_object_or_404(Company, slug = company_slug) 

    f = AdminEditForm(instance = company) 
    if request.method == 'POST': 
     f = AdminEditForm(request.POST, instance = company) 
     if f.is_valid(): 
      print "Processing form" 
      print f.cleaned_data['intro_pic'] 
      f.save() 

    return render_to_response('uadmin/edit.html', {'company':company, 'f':f}, RequestContext(request)) 


class AdminEditForm(ModelForm): 
    class Meta: 
     model = Company 
     fields = ['logo', 'intro_pic', 'intro_text'] 

Respuesta

97

Bueno me siento como un idiota. Con el fin de Django para poder procesar los archivos cargados, lo que necesita para pasar la variable request.FILES a la forma (tiene sentido, ¿no ?!)

En mi caso, la siguiente línea va desde:

f = AdminEditForm(request.POST, instance = company) 
para

:

f = AdminEditForm(request.POST, request.FILES, instance = company) 

Otra cosa a comprobar (si llegas a tener algo como esto en el futuro) es que su forma es de varias partes. Su etiqueta <form> debería verse algo como esto:

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

Thanks! En mi caso me faltaba el 'enctype =" multipart/form-data "' parte –

+1

compañero idiota aquí – Chase

+0

Es algo sorprendentemente fácil de perder. Desde entonces, he encontrado que dejar que Crispy maneje mis etiquetas de formulario (y otras cosas) me ayuda. – Oli

Cuestiones relacionadas