'str' 实例之间不支持 /formpage 处的类型错误'>' 'int'该错误在form.is_valid中是特定的



这是 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],但使用IntegerFieldmin_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
)

相关内容

最新更新