我制作了以下Django表单.

from django.core.validators import int_list_validator

class RoomForm(forms. Form):
    room_numbers = forms.CharField(validators=[int_list_validator], required=False, max_length=4000)

在这个表单中,即使我提交一个类似"Hello"的字符串,表单也会被提交.我的意思是,我可以在views.py中获得‘Hello’的值.我不明白为什么,因为"int_list_validator"不应该允许这样做.

推荐答案

不幸的命名:int_list_validator不是验证器,而是创建验证器的帮助器函数.

validate_comma_separated_integer_list是一个验证器,通过使用比默认_("Enter a valid value.")更合适的消息调用int_list_validator来创建:

validate_comma_separated_integer_list = int_list_validator(
    message=_("Enter only digits separated by commas."),
)

用途:

from django import forms
from django.core.validators import int_list_validator, validate_comma_separated_integer_list


# room_numbers = forms.CharField(validators=[int_list_validator], required=False, max_length=4000)
room_numbers = forms.CharField(validators=[int_list_validator()], required=False, max_length=4000)

# Or
room_numbers = forms.CharField(validators=[validate_comma_separated_integer_list], required=False, max_length=4000)

Django相关问答推荐

未显示SWAGER上的一些示例架构

Django中的登录重定向

Templatetag 在 Django 4.2 模板 IF 条件中不起作用

DjangoRestFramework 解析错误:"多部分表单解析错误多部分中的无效边界:None"

Docker 中的 Django检测到更改...,正在重新加载错误

是否可以在 Django 中重命名应用程序的组名?

Django 长时间运行带有线程/处理的异步任务

初始填充 Django 表单

Django基于类的视图上的success_url的反向抱怨循环导入

模板过滤器修剪任何前导leading或尾随trailing空格

Django:想要将一个空字段显示为空白而不是显示无

relation "django_site" does not exist

UnicodeDecodeError:asciicodec can't decode byte 0xe0 in position 0: ordinal not in range(128)

如何迭代模板中 SelectField 的选项?

settings.DATABASES 配置不正确使用 django 1.4 执行 syncdb 时出错

import_module 的 Django 1.9 ImportError

AUTH_USER_MODEL 指的是尚未安装和创建的模型 .. AbstractUser 模型无法登录

Django 模型(1054,Unknown column in 'field list')

关闭 Django Rest Framework ModelViewSet 的自动分页

Django 1.7 迁移不会重新创建删除的表,为什么?