Django保存带有图像文件问题的表单

Posted

技术标签:

【中文标题】Django保存带有图像文件问题的表单【英文标题】:Django saving Form with Image File Issue 【发布时间】:2015-06-23 03:39:29 【问题描述】:

我正在尝试从简单的 HMTL 表单上传图像文件,但出现以下错误:

“MultiValueDict”对象没有属性“_committed”

我没有使用表单,因为我需要一次上传许多文件,而据我所知,Djangoforms 只允许一次上传一个文件。

所以使用正常的方式似乎行不通...

代码结构如下:

Models.py

class ProfileImage(models.Model):
    account_id = models.IntegerField(primary_key=True)
    image = models.ImageField(upload_to='profile/%Y/%m/%d')
    profile = models.CharField(max_length=512, blank=True)
    description = models.CharField(max_length=255, blank=True)
    class Meta:
        managed = False
        db_table = 'ProfileImage'

HTML

  <form  id="fileinfo" name="fileinfo" action="profileimage" enctype="multipart/form-data" method="post" >
      % csrf_token %
      <table>
          <tr>
             <input type="file" size="60" id="myfile" name="myfile" multiple="false" value="Profile Picture"
             accept="image/gif, image/jpeg, image/png">
          </tr>
          <tr>
             <input type="submit" value="Upload" />
             <div id="accresult" name="accresult"></div>
          </tr>
      </table>
  </form>

Views.py

def profile_image(request):
    profile_image = ProfileImage(account_id=request.session.get('memberid', False), image=request.FILES,  profile='', description='')
    try:          
      print 'Userid: ', profile_image.account_id
      print 'File sent...', profile_image.image
      profile_image.save()
    except Exception as err:
       print 'Error: ', err.message
    useraccount = request.session.get('useraccount', False)
    return render(request, 'profileImage.html', 'useraccount': useraccount, 'image': profile_image)

参数正确到达,但是当尝试save() 时出现错误,我刚刚尝试了多种方式,非常感谢您的帮助。

【问题讨论】:

错误是什么? print 'Error: ', err.message 显示什么? 【参考方案1】:

request.FILES 是一个文件列表。您需要指定要传递给image 参数的文件。喜欢这个。

profile_image = ProfileImage(account_id=request.session.get('memberid', False), image=request.FILES[0],  profile='', description='')

这不是很好,因为如果没有文件,它会引发异常。您可能需要使用Django form 来更好地处理表单。

【讨论】:

以上是关于Django保存带有图像文件问题的表单的主要内容,如果未能解决你的问题,请参考以下文章

无法将图像上传到 Django 项目,获取表单对象没有属性“保存”

通过 django shell 保存图像/文件

提交带有表格的图像时需要Django Pillow或Pil吗?

使用 Django 表单编辑图像字段

如何在 django 中正确保存多个文件?

Django Rest Framework - 提交的数据不是文件。检查表单上的编码类型