Django Imagefield не работает должным образом через ModelForm
Я уверен, что я делаю что-то действительно явно глупое, но я пытался понять это в течение нескольких часов, и ничто не выпрыгивает на меня.
Я использую ModelForm, поэтому я могу выставить несколько полей из модели для редактирования. 2x ImageField, 1x TextField. Форма обрабатывается, и TextField работает. Два ImageFields не работают, и именно поэтому я здесь сегодня.
Я использую Django 1.0.2
Вот соответствующий код (спросите, нужно ли вам больше - и я не включаю HTML, потому что эта часть работает нормально):
Модель:
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)
Просмотр и форму:
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']
Ответы
Ответ 1
Ну, я чувствую себя идиотом. Для того, чтобы Django мог обрабатывать загруженные файлы, вам нужно передать переменную request.FILES в форму (имеет смысл, правильно?!)
В моем случае следующая строка идет от:
f = AdminEditForm(request.POST, instance = company)
To:
f = AdminEditForm(request.POST, request.FILES, instance = company)
Еще одна вещь, которую нужно проверить (если вы столкнетесь с чем-то подобным в будущем) заключается в том, что ваша форма является многочастной. Тег <form>
должен выглядеть примерно так:
<form enctype="multipart/form-data" method="post" action="">