我在使用Django表格时遇到了一些麻烦。当我调用我的表单站点时,总是出现验证错误(此字段是必需的)。如果字段没有像javascript函数那样填充,我更喜欢在单击提交按钮后看到此消息。另外我正在使用正则表达式进行验证,这工作正常。
我正在使用CVB。这是一些代码:
models.py
class Institute(models.Model):
name = models.CharField(max_length=50)
timestamp = models.DateTimeField(auto_now_add=True)
views.py
class InstituteCreate(CreateView):
model = Institute
form_class = InstituteForm
success_url = reverse_lazy('institute_list')
forms.py
class InstituteForm(forms.ModelForm):
name= forms.CharField(error_messages={'required': 'Own Error Text'}, validators=[RegexValidator(regex='^[a-zA-ZäüößÄÜÖ]*$', message='forbidden string', code='string_invalid')])
class Meta:
model = Institute
fields = ['name']
希望有人知道如何解决它。
EDIT1:
我的模板非常简单
{% block pagetitle %}Institutes{%endblock %}
{% block content %}
<form class="form-horizontal" name="form_group" method="post">
{% csrf_token %}
<div>
{{ form.as_p }}
</div>
<input class="btn btn-primary" type="submit" value="click me" />
</form>
{% endblock %}
和我的网址配置:
urlpatterns = patterns('',
url(r'^institute_create/$', views.InstituteCreate.as_view(), name='institute_create'),
)
我是Django开发的新手,所以我会尝试更详细地解释这个问题:
在我的网站上,当我打开链接www.exampleurl.com/institute_create时,会显示我的表格。然后我看到我必须输入研究所名称的字段。在该字段上方显示文本“此字段是必需的”。但我不想看到这个,直到我尝试提交一个空表格。
当我输入一些不匹配的文本并按下提交按钮时,错误文本字段会按预期将其消息更改为禁用字符串。
答案 0 :(得分:2)
除非您对视图使用POST请求,否则表单验证不会被触发。您的代码中的其他位置可能存在错误,但是,您希望解决的代码有几个问题:
Python中的类应始终以大写字母开头,并遵循CapWords convention:
class Institute(models.Model):
name = models.CharField(max_length=50)
# just use the built-in `auto_now_add` argument
timestamp = models.DateTimeField(auto_now_add=True)
class InstituteCreate(CreateView):
model = Institute
form_class = InstituteForm
success_url = reverse_lazy('institute_list')
class InstituteForm(forms.ModelForm):
# All Django model/form fields are required by default, so you
# can drop the `required=True` here
name= forms.CharField(validators=[RegexValidator(regex='^[a-zA-ZäüößÄÜÖ]*$',
message='forbidden string', code='string_invalid')])
class Meta:
model = Institute
fields = ['name']
否则,无法区分班级定义和班级实例之间的区别,并且你不太可能遇到碰撞。
出于好奇,您是否看到浏览器中的HTML5验证错误与Django的错误?如果您可以将模板代码添加到您的问题中,则可能有所帮助。
答案 1 :(得分:0)
我知道这是一个非常古老的问题,但我没有看到答案。我也是django的初学者,当我遇到同样的问题时,我正在关注Django教程。 我这样解决了:
if 'voteButton' in request.POST:
context = {
'question': question,
'error_message': "You didn't select a choice"
}
return render(request, 'polls/details.html', context)
elif:
# do something else. Display error message
voteButton是表单中“提交”按钮的名称。希望这可以帮助!如果这种方法有误,请告诉我。
答案 2 :(得分:0)
正如布兰登所说,您的表单将在POST请求中得到验证。因此,请确保在页面的首次访问期间,表单不会绑定到POST请求。
例如,不要这样做:
def register(request):
form = RegistrationForm(request.POST)
if request.method == 'POST':
if form.is_valid():
# Do something
return render(request, 'register.html', {'form': form})
仅当通过POST请求访问页面时,才应将表单绑定到POST请求。这应该有帮助:
def register(request):
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
# DO something
else :
form = RegistrationForm()
return render(request, 'register.html', {'form': form})