【问题标题】:Django Imagefield not working properly via ModelFormDjango Imagefield 无法通过 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']

【问题讨论】:

    标签: django django-forms django-models


    【解决方案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 处理我的表单标签(以及其他事情)会有所帮助。
      猜你喜欢
      • 2012-06-05
      • 1970-01-01
      • 2013-11-06
      • 2020-05-05
      • 2013-10-21
      • 2014-03-07
      • 2013-02-25
      • 2015-01-06
      • 1970-01-01
      相关资源
      最近更新 更多