我找不到关于这个主题的任何相关答案.我想在Django中创建验证器,其中包含以下参数:
在forms.py文件中:
class DateForm(forms.Form):
forms.DateField(
validators=[validate_range_of_date(value,"01/06/2012","31/03/2013")]
)
Run Code Online (Sandbox Code Playgroud)
在validators.py文件中:
def validate_range_of_date(date_to_verify, min_date, max_date):
...
Run Code Online (Sandbox Code Playgroud)
我现在可以通过clean方法或自定义字段来完成它,但我认为通过验证器进行此操作会更好.可能吗?
提前致谢
Dun*_*kes 12
您可以尝试编写一个返回函数的函数.
def date_range_validator(min_date, max_date):
def innerfn(date_to_test):
if not (min_date <= date_to_test <= max_date):
raise ValidationError(
'Inappropriate date: %s is not between %s and %s' %
(date_to_test, min_date, max_date)
)
return innerfn
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过调用此函数来创建您真正想要的验证器:
class DateForm(forms.Form):
forms.DateField(
validators=[
date_range_validator(
datetime.date(2012, 06, 01), datetime.date(2013, 03, 31)
)
]
)
Run Code Online (Sandbox Code Playgroud)
(感谢更正@ user2577922)
PS我没有测试过这个,但希望你能得到这个想法 - 编写一个函数,它将你想要的两个日期作为你的范围的边界,并返回一个函数来检查它传递的日期是在范围.
我建议看一下django.core.validators,看看Django如何使用Regex验证器,并将其扩展为用于不同类型的字段.
class MyValidator (object):
def __init__(self, params):
pass # Init the instance variables here
def __call__(self, value):
pass # Actual validation logic comes here
Run Code Online (Sandbox Code Playgroud)
只需将参数传递给验证器即可
validators=[MyValidator(params)]
Run Code Online (Sandbox Code Playgroud)
没有测试,但我没有看到任何理由不起作用.
编辑:
有机会测试它,它的工作原理.
| 归档时间: |
|
| 查看次数: |
4885 次 |
| 最近记录: |