我有一个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,则一切看起来都应该正确。
我相信验证消息应该在用户单击提交之后而不是之前显示。我如何删除验证,以便当用户第一次打开表单时它不会显示?
附加参考:Disable validation when calling form for the first time
您的表单在首次启动时经过了验证,因为您是通过POST请求而不是GET请求来获取视图的。 POST到视图时,您正在提交表单数据,即使该数据为空。因此,您的表单将与数据bound,已验证并包含错误。
您需要通过GET请求启动视图。确保指向您的视图的链接只是纯链接(<a>
标签),而不是提交按钮。