【发布时间】:2019-07-01 21:57:21
【问题描述】:
我想在我的表单上运行字段验证,如表单和字段验证-using validation in practice。
我的表单如下所示:
from kapsule.validators import name_zero_min_length, name_max_length
class NameUpdateForm(forms.Form):
name = forms.CharField(
validators=[
name_zero_min_length,
name_max_length
]
)
我的验证者:
from django.core.exceptions import ValidationError
def name_zero_min_length(name_field):
# Check minimum length
if not len(name_field) > 0:
print('firing zero length')
raise ValidationError(
"My custom error message name must be at least one character"
)
def name_max_length(name_field):
# Check that the name is under the max length
MAX_LENGTH = 200
if len(name_field) > MAX_LENGTH:
print('raising')
raise ValidationError(
"My custom error message name cannot be more than {} characters".format(MAX_LENGTH)
)
我的看法是这样的:
def edit_kapsule_name(request, kapsule_pk):
kapsule = Kapsule.objects.get(pk=kapsule_pk)
form = NameUpdateForm(request.POST)
response = {}
print('pre-validation')
if form.is_valid():
print('VALID')
name = form.data.get('name')
kapsule.name = name
kapsule.save(update_fields=['name'])
else:
print('INVALID') # INVALID
print('json') # json
errors = form._errors.as_json()
print(errors) # {"name": [{"message": "This field is required.", "code": "required"}]}
我的输出在上面的代码中被注释了(无效,并且给出了与我预期不同的错误)。
为什么我的自定义验证没有运行?
这似乎与我的模型验证(工作)相匹配,第二个回复here
【问题讨论】:
-
为什么说不运行?
-
@RaydelMiranda 验证器中有打印语句(未显示),我看到字段必需的错误,我也希望看到我自己的错误。
-
@RaydelMiranda 我还在验证器中的 if 子句之前添加了一个 print 语句,它肯定不会被调用
标签: django validation