Django 创建视图表单验证警告

Django Create View form validation warnings

我有一个 创建视图 表单,如下所示:

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

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

您需要使用 GET 请求启动您的视图。确保您视图中的 link 只是一个普通的 link(<a> 标签),而不是提交按钮。