Django UpdateView / ImageField问题:不返回新上传的图像

时间:2015-03-06 16:05:07

标签: python django imagefield

模型:

class Logo(models.Model):
    media = models.ImageField(upload_to='uploads')

    def __unicode__(self):
      return self.media.url

视图:

class LogoEdit(UpdateView):
  model = Logo
  template_name = 'polls/logo-edit.html'
  success_url = '/polls/logos/'

  def form_valid(self, form):
    pdb.set_trace()

模板:

  <form id="my_form" action="" method="post">{% csrf_token %}
      {{ form.as_p }}
      <input type="submit" value="Save Changes" />
  </form>

选择新图片:

form

调试视图:

现有形象:

(Pdb) self.object
<Logo: media/uploads/DSCN0844.JPG>

带有新选择图像的表格(DSC_0021.JPG):

(Pdb) test = form.save()
(Pdb) test
<Logo: media/uploads/DSCN0844.JPG>

正如您所见,原始图像仍然保留在形式中!

3 个答案:

答案 0 :(得分:7)

如果您使用的是UpdateView,则只需将enctype="multipart/form-data"属性添加到模板中的表单标记即可。其余的将由UpdateView类处理。

答案 1 :(得分:5)

您需要保存提供请求的表单.FILES:

if request.method == 'POST':
    form = MyForm(request.POST, request.FILES)
    if form.is_valid():
        form.save()

在HTML表单中(因为表单中有<input type="file">):

<form method="POST" enctype="multipart/form-data">

答案 2 :(得分:0)

只需添加到您的模板

 <form method="POST" enctype="multipart/form-data">