47

我确定我正在做一些非常明显愚蠢的事情,但我已经试图弄清楚几个小时了,但没有任何事情发生在我身上。

我正在使用 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']
4

2 回答 2

107

好吧,我觉得自己像个白痴。为了让 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="">
于 2009-03-25T13:44:43.730 回答
0

这发生在我身上,因为我缺少文件输入的“名称”属性。

于 2021-02-13T03:43:30.413 回答