【问题标题】:Django use of form input without calling formDjango使用表单输入而不调用表单
【发布时间】: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 }}" alt="">
                                <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)

【问题讨论】:

  • 手动放置字段是可以的,没有问题,你的选择。

标签: django django-forms


【解决方案1】:

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

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

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

{{ form.pro_img }}

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 2021-06-26
    相关资源
    最近更新 更多