在没有 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。 &lt;input type="files" id="imgid"&gt;这种类型。我怎样才能拥有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。 &lt;input type="files" id="imgid"&gt;这种类型。我怎样才能拥有form.img 的 ID? 救命! @DeepjyotiDe:可以指定widget的attrs,它是一个字典。在这里你可能想要attrs='id': 'imgid':docs.djangoproject.com/en/3.0/ref/forms/widgets/… 实际上我想为我的表单创建一个预览页面。用户填写表格并点击下一步按钮后,将被引导至预览页面。我不想在他们从预览页面提交之前保存表单。在我之前的尝试中,表单在点击下一步按钮时被保存,并在用户点击预览页面中的提交按钮时被覆盖。缺点:如果用户在预览页面关闭了浏览器窗口,则表单已提交。

以上是关于在没有 django ModelForm 的情况下从用户上传图像的问题的主要内容,如果未能解决你的问题,请参考以下文章

不使用modelform的django模型验证

Django ModelForm

django模型表单ModelForm

django modelform 为空显示空白

将属性添加到 django ModelForm 字段的 <input> 标记

将属性添加到 django ModelForm 字段的 <input> 标记