2009-03-25 7 views
42

Jestem pewien, że robię coś naprawdę oczywistego, ale próbuję to rozgryźć przez kilka godzin i nic nie wyskakuje na mnie.Django Imagefield nie działa poprawnie za pomocą ModelForm

Używam ModelForm, więc mogę wystawić kilka pól z modelu do edycji. 2x ImageField, 1x TextField. Formularz jest przetwarzany, a TextField działa. Dwa ImageFields nie działają i dlatego właśnie jestem tutaj dzisiaj.

Używam Django 1.0.2

Oto odpowiedni kod (zapytać, czy trzeba więcej - i nie jestem w tym HTML, ponieważ ta część wydaje się działać dobrze):

model :

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) 

Zobacz i 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'] 

Odpowiedz

97

Dobrze czuję się jak idiota. Aby Django móc przetwarzać pobrane pliki, trzeba przekazać zmienną request.FILES do formularza (ma sens, prawda ?!)

w moim przypadku następuje linia przechodzi od:

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

do:

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

Inną rzeczą, aby sprawdzić (jeżeli napotkasz coś takiego w przyszłości) jest to, że forma jest wieloczęściowy. Twój tag <form> powinien wyglądać mniej więcej tak:

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

Dzięki! W moim przypadku brakowało mi "enctype =" multipart/form-data "' part –

+1

, idiota tutaj – Chase

+0

Zaskakująco łatwo jest tęsknić. Od tego czasu pomagam Crispy w obsłudze znaczników formularzy (a także innych rzeczy). – Oli

Powiązane problemy