Django Imagefield无法通过ModelForm正常工作
我确定我正在做一些非常愚蠢的事情,但是现在我一直在试图弄清楚几个小时,没有什么会跳到我身上。
我正在使用ModelForm,所以我可以从模型中公开几个字段进行编辑。 2个ImageField,1个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']
那么我觉得自己像一个白痴。 为了让Django能够处理上传的文件,你需要将request.FILESvariables传递给表单(有道理,对吧?!)
在我的情况下,从以下行:
f = AdminEditForm(request.POST, instance = company)
至:
f = AdminEditForm(request.POST, request.FILES, instance = company)
另一件事要检查(如果你将来遇到这样的事情)是你的表单是多部分的。 你的<form>
标签应该是这样的:
<form enctype="multipart/form-data" method="post" action="">