在没有 django ModelForm 的情况下从用户上传图像的问题
Posted
技术标签:
【中文标题】在没有 django ModelForm 的情况下从用户上传图像的问题【英文标题】:Issues in uploading image from user without django ModelForm 【发布时间】:2020-09-14 22:10:33 【问题描述】:我正在尝试在不使用 ModelForm 的情况下创建表单。我将 html 中的输入元素用于(上传名称和图像)。但是我无法通过此过程上传图像。 名称正在保存,但图像未保存。 我的代码:
models.py
class Register(models.Model):
name = models.CharField(max_length=50, null=True)
idCard = models.FileField(upload_to='idCard', null=True)
views.py
def index(request):
if request.method == 'POST':
data.name = request.POST.get('name')
data.idCard = request.POST.get('idCard')
data.save()
return redirect('/')
return render(request, 'event/index.html')
index.html
<form class="mform" id="myform" method="POST" id="myform" action="" enctype="multipart/form-data">
% csrf_token %
<fieldset>
<legend>Registeration</legend>
<table cellspacing="0"><tbody>
<tr><td>
<label for="u_name"> Username :</label></td><td>
<input type="text" name="name" id="u_name">
<td>
</tr>
<tr><td>
<label for="u_img"> IDCard :</label></td><td>
<input type='file' accept='image/*' onchange='openFile(event)' name="idCard" id="u_img">
</td></tr>
名称正在保存,但图像未保存。
【问题讨论】:
文件存放在request.FILES
:data.idCard = request.FILES.get('idCard')
谢谢。那完成了工作。实际上我想要一个 jQuery 脚本的 id。 <input type="files" id="imgid">
这种类型。我怎样才能拥有form.img
的 ID? 救命!
【参考方案1】:
文件存储在request.FILES
:
def index(request):
if request.method == 'POST':
data.name = request.POST.get('name')
data.idCard = request.FILES.get('idCard')
data.save()
return redirect('/')
return render(request, 'event/index.html')
话虽如此,我强烈建议使用Form
(或ModelForm
)。表单不仅处理保存对象,还执行适当的验证,可以返回错误消息,并删除大量样板代码。通常通过一些调整,您可以让表单看起来像您想要的那样。但是即使你在模板中手动编写表单,你仍然可以使用 Django 级别的表单来验证和保存对象。
【讨论】:
谢谢。那完成了工作。实际上我想要一个 jQuery 脚本的 id。<input type="files" id="imgid">
这种类型。我怎样才能拥有form.img
的 ID? 救命!
@DeepjyotiDe:可以指定widget的attrs
,它是一个字典。在这里你可能想要attrs='id': 'imgid'
:docs.djangoproject.com/en/3.0/ref/forms/widgets/…
实际上我想为我的表单创建一个预览页面。用户填写表格并点击下一步按钮后,将被引导至预览页面。我不想在他们从预览页面提交之前保存表单。在我之前的尝试中,表单在点击下一步按钮时被保存,并在用户点击预览页面中的提交按钮时被覆盖。缺点:如果用户在预览页面关闭了浏览器窗口,则表单已提交。以上是关于在没有 django ModelForm 的情况下从用户上传图像的问题的主要内容,如果未能解决你的问题,请参考以下文章