Django使用表单输入而不调用表单

Posted

技术标签:

【中文标题】Django使用表单输入而不调用表单【英文标题】:Django use of form input without calling form 【发布时间】:2021-04-21 07:50:27 【问题描述】:

这可能是个愚蠢的问题,但是在不调用表单的情况下使用输入是否可以。

我的表单

class st_image(forms.ModelForm):
    pro_img =forms.ImageField(widget=forms.FileInput(attrs="id" :"upload_image", "class":"form-control image"))
    
    class Meta:
        model=CustomUser
        fields= [ 'pro_img']

我的观点

def st_profile_img(request):
    pk = request.user.id
    obj = get_object_or_404(CustomUser, pk=pk)
    form=st_image(request.POST or None,request.FILES or None, instance=obj)
    if request.method == 'POST':
        if(form.is_valid()):       
            form.save()
            messages.success(request, "Амжилттай бүртгэлээ")
            return HttpResponseRedirect(reverse('st_profile'))
        else:
            messages.error(request, "Зөвхөн зураг хийнэ үү")
            return HttpResponseRedirect(reverse('st_profile'))

我的模板

<form method="POST" action="% url 'st_profile_img' %" enctype="multipart/form-data"
                            id="image-form">
                            % csrf_token %
                            <label for="upload_image" class="text-center student-profile-img">
                                <img id="uploaded_image" class="image-responsive" src=" user.pro_img.url " >
                                <div class="overlay">
                                    <div class="text">Засах</div>
                                </div>
                                <input type="file" name="pro_img" class="image" id="upload_image"
                                    oninput="uploadImage()" style="display: none;" accept="image/x-png,image/jpeg" />
                            </label>
                        </form>

如您所见,我没有使用 form,所以可以使用这样的输入(使用与预期表单输入相同的名称)吗?

或者是否有任何正确的方法可以使用form调用输入名称? (除了 request.POST.get 并且不使用 attrs)

【问题讨论】:

手动放置字段是可以的,没有问题,你的选择。 【参考方案1】:

是的,您无需在模板中使用 form 即可使表单正常工作。但是,您需要提供所有正确的 &lt;input&gt; 标签:

<input type="file" name="pro_img" ...>

如果你这样渲染它会自动完成:

 form.pro_img 

但在这种情况下,您将无法自定义 &lt;input&gt; 标签,这可能是您选择第一种方法的原因。

另一种自定义输入字段的方法是通过creating your own custom widget,但这可能需要更多的工作,并且在您的情况下并不真正需要。

【讨论】:

以上是关于Django使用表单输入而不调用表单的主要内容,如果未能解决你的问题,请参考以下文章

Django中的Form表单验证

在没有 django 表单的 django 模板上工作 [关闭]

使用Ajax验证并提交Django表单(django-crispy-forms)

Django 表单未接收输入

Angular 2:禁用输入字段而不从表单组中删除?

Django:引导输入组未使用表单呈现所需的 HTML/CSS