首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Django自定义字段验证器与clean

Django自定义字段验证器与clean
EN

Stack Overflow用户
提问于 2011-06-16 23:20:22
回答 2查看 10.1K关注 0票数 20

我想创建TodayOrLaterDateField(),它是DateField()字段的子类,因为我在很多地方都使用这个条件。此字段的目的是避免输入过去的日期。

做这件事最直接的方法是什么?我把验证器和干净方法搞混了。我尝试过使用clean(),但在将值与datetime.date.today()进行比较时,我遇到了“将unicode object与date进行比较”的错误。

我使用的是Django 1.3

EN

回答 2

Stack Overflow用户

发布于 2011-06-16 23:56:50

验证器只验证,它们不返回改进后的格式;Clean方法验证并返回一个(有时经过修改的)值。

我认为这里的方法是使用带有验证器的DateField作为带有default_validators集的DateField的继承类。

代码语言:javascript
复制
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,]

编辑:如果你只想在那里而不是在整个应用程序中使用相同的验证器,你也可以将它应用到你的表单字段中。

票数 30
EN

Stack Overflow用户

发布于 2011-06-16 23:42:27

您可以扩展models.DateField并覆盖to_python方法。没有在Django 1.3上测试,但应该可以工作。

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6374275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档