Django ImageField não está funcionando corretamente via ModelForm

votos
43

Tenho certeza de que estou fazendo algo realmente obviamente estúpido, mas eu venho tentando descobrir isso por algumas horas agora e nada está saltando para fora em mim.

Eu estou usando um ModelForm para que eu possa expor alguns campos de um modelo para edição. 2x ImageField, 1x TextField. O formulário é processado e o TextField funciona. Os dois ImageFields não funcionam e são por isso que estou aqui hoje.

Eu estou usando Django 1.0.2

Aqui está o código relevante (perguntar se você precisar de mais - e eu não estou incluindo o HTML porque essa parte parece funcionar bem):

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 e 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']
Publicado 25/03/2009 em 10:06
fonte usuário
Em outras línguas...                            


1 respostas

votos
98

Bem, eu sinto como um idiota. Para que o Django para ser capaz de processar arquivos enviados, você precisa passar a variável request.FILES à forma (faz sentido, certo ?!)

No meu caso a seguinte linha vai de:

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

Para:

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

Outra coisa a verificar (se você tiver algo parecido com isso no futuro) é que a sua forma é multipart. Sua <form>marca deve ser algo como isto:

<form enctype="multipart/form-data" method="post" action="">
Respondeu 25/03/2009 em 14:44
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more