模型:
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>
选择新图片:
调试视图:
现有形象:
(Pdb) self.object
<Logo: media/uploads/DSCN0844.JPG>
带有新选择图像的表格(DSC_0021.JPG):
(Pdb) test = form.save()
(Pdb) test
<Logo: media/uploads/DSCN0844.JPG>
正如您所见,原始图像仍然保留在形式中!
答案 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">