Rob*_*ert 18 forms django validation field
我想创建TodayOrLaterDateField(),它将子类化DateField()字段,因为我在很多地方使用这个条件.该领域的目的是避免过去的日期.
这样做最直接的方法是什么?我对验证器与清洁方法感到困惑.我已尝试使用clean()但是在将值与datetime.date.today()进行比较时,我得到"将unicode对象与日期进行比较"错误.
我正在使用Django 1.3
fij*_*ter 29
验证器仅验证,它们不返回改进的格式; 清洁方法既验证又返回(有时修改)值.
我认为这里的方法是使用带有验证器的DateField作为DateField的继承类,并设置default_validators.
import datetime
from django.core import exceptions
from django.db import models
from django.utils.translation import ugettext_lazy as _
def validate_date_today_or_later(value):
'Place this in validators.py and import it to keep your model a bit cleaner'
if value < datetime.date.today():
raise exceptions.ValidationError(_('Date must be today or later'))
class TodayOrLaterDateField(models.DateField):
default_validators = [validate_date_today_or_later,]
Run Code Online (Sandbox Code Playgroud)
编辑:您可以将相同的验证器应用于表单字段,如果您只想在那里而不是整个应用程序中.
您可以扩展models.DateField和重写to_python方法。没有在 Django 1.3 上进行测试,但应该可以工作。
import datetime
from django.core import exceptions
from django.db import models
class TodayOrLaterDateField(models.DateField):
def to_python(self, value):
value = super(TodayOrLaterDateField, self).to_python(value)
if value < datetime.date.today():
raise exceptions.ValidationError(u'Date must be today or later')
return value
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9204 次 |
| 最近记录: |