这是 forms.py
from django import forms
from django.core import validators
def check_for_z(value):
if value[0].lower() !='z':
raise forms.ValidationError("NAME NEEDS TO START WITH Z")
class FormName(forms.Form):
name = forms.CharField()
email = forms.EmailField()
text = forms.CharField(widget= forms.Textarea)
botcatcher = forms.CharField(required=False,
widget=forms.HiddenInput,
validators=[validators.MaxValueValidator(0)])
这是 views.py
from django.shortcuts import render
from . import forms
from .forms import FormName
from django.http import HttpResponseRedirect
def index(request):
return render(request,'formapp/index.html')
def form_name_view(request):
form = forms.FormName()
if request.method == "POST":
form = forms.FormName(request.POST)
if form .is_valid ():
# do something code
print("Validations scuces")
print("NAME: "+form.cleaned_data["name"])
print("EMAIL: "+form.cleaned_data["email"])
print("TEXT:"+form.cleaned_data['text'])
# return HttpResponseRedirect("/thanks/")
else:
form= FormName()
return render(request,'formapp/form_page.html',{'form' : form})
现在实际上它在form.is_valid()行上抛出错误,并在/formpage 处显示 TypeError "str"和"int"实例之间不支持">">
当我在botcatcher中更改/添加属性时,就会发生这种情况,即我添加值='笑话'
其他一切都与普通的django相似
验证器MaxValueValidator(0)
和CharField
不能很好地协同工作,因为CharField
会将值清理到str
,然后将其与int
进行比较。
您可以使用IntegerField
来检查该值是否小于或等于零:
class FormName(forms.Form):
name = forms.CharField()
email = forms.EmailField()
text = forms.CharField(widget=forms.Textarea)
botcatcher = forms.IntegerField(
required=False,
widget=forms.HiddenInput,
validators=[validators.MaxValueValidator(0)]
)
如果你想验证这个数字是正数,你可以使用MinValidator
[Django-doc],但使用IntegerField
的min_value=…
[Django-doc] 或max_value=…
[Django-doc] 参数更容易:
class FormName(forms.Form):
name = forms.CharField()
email = forms.EmailField()
text = forms.CharField(widget=forms.Textarea)
botcatcher = forms.IntegerField(
required=False,
widget=forms.HiddenInput,
min_value=0# ← checks if it is a postive number
)