Django Imagefield 无法通过 ModelForm 正常工作
Posted
技术标签:
【中文标题】Django Imagefield 无法通过 ModelForm 正常工作【英文标题】:Django Imagefield not working properly via ModelForm 【发布时间】:2010-10-15 09:52:15 【问题描述】:我确定我在做一些很明显很愚蠢的事情,但我已经尝试了几个小时了,但没有任何反应。
我正在使用 ModelForm,因此我可以从模型中公开一些字段以进行编辑。 2 个图像字段,1 个文本字段。表单被处理并且 TextField 工作。这两个 ImageField 不起作用,这就是我今天在这里的原因。
我正在使用 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】:这发生在我身上,因为我缺少文件输入的“名称”属性。
【讨论】:
【参考方案2】:我觉得自己像个白痴。为了让 Django 能够处理上传的文件,您需要将 request.FILES 变量传递给表单(有意义,对吧?!)
在我的情况下,以下行来自:
f = AdminEditForm(request.POST, instance = company)
收件人:
f = AdminEditForm(request.POST, request.FILES, instance = company)
要检查的另一件事(如果您将来遇到类似的事情)是您的表单是多部分的。你的<form>
标签应该是这样的:
<form enctype="multipart/form-data" method="post" action="">
【讨论】:
谢谢!就我而言,我错过了enctype="multipart/form-data"
部分
这是一件非常容易错过的事情。从那以后,我发现让 Crispy 处理我的表单标签(以及其他事情)会有所帮助。以上是关于Django Imagefield 无法通过 ModelForm 正常工作的主要内容,如果未能解决你的问题,请参考以下文章
python/django - “无法使用 ImageField,因为没有安装 Pillow”
ImageField / FileField Django表单目前无法修剪文件名的路径
Django - 无法为具有动态 upload_to 值的 ImageField 创建迁移
将通过 ajax 上传的文件保存到 Django 模型 ImageField