Django Create View表单验证警告

问题描述 投票:0回答:1

我有一个Create View表单,看起来像这样:

class LineItemCreateView(CreateView):
model = LineItem
fields = ('sku', 'description', 'quantity', 'order', 'status')

def get_form(self, form_class=None):
    form = super(LineItemCreateView, self).get_form(form_class)
    form.fields['order'].initial = self.kwargs['order_id']
    form.fields['description'].widget = forms.Textarea()
    return form

urls.py

path('<int:order_id>/add-new-record/',
     LineItemCreateView.as_view(), name='lineitem_form'),

html 模板

{% load crispy_forms_tags %}
{% block content %}
<form method="post" novalidate>
    {% csrf_token %}
    {{ form|crispy }}
    <button type="submit" class="btn btn-success" formnovalidate>Save record</button>
</form>
{% endblock %}

当用户首次加载表单页面时,每个字段都会显示验证警告。此行为导致窗体不显示我设置的初始值。但是,如果刷新URL,则一切看起来都应该正确。

我相信验证消息应该在用户单击提交之后而不是之前显示。我如何删除验证,以便当用户第一次打开表单时它不会显示?

Button click

First load

Desired first load

附加参考:Disable validation when calling form for the first time

django forms validation view field
1个回答
0
投票

您的表单在首次启动时经过了验证,因为您是通过POST请求而不是GET请求来获取视图的。 POST到视图时,您正在提交表单数据,即使该数据为空。因此,您的表单将与数据bound,已验证并包含错误。

您需要通过GET请求启动视图。确保指向您的视图的链接只是纯链接(<a>标签),而不是提交按钮。

© www.soinside.com 2019 - 2024. All rights reserved.