Django Model DateField to_python

时间:2012-06-11 01:34:56

标签: python django validation model django-admin

我正在研究Django 1.4,我有以下疑问。在Django Admin上的日期之间进行解析时,格式应为格式“%Y-%m-%d”。我刚检查了代码,而django模型DateField没有使用设置来检查“to_python”的有效日期。

例如,现在唯一有效的格式是:

&fecha_inicio__lte=2012-06-10

但我也想要:

&fecha_inicio__lte=06/10/2012

1 个答案:

答案 0 :(得分:2)

您可以使用此功能转换日期:

import re

def parse_slash_date(value):
    m = re.match(r'^(?P<day>[0-9]{1,2})/(?P<month>[0-9]{1,2})/(?P<year>[0-9]{4})$', value)
    if m:
        return '%s-%s-%s' % (
            m.group('year'), m.group('month'), m.group('day'))

示例:

In [4]: parse_slash_date('06/10/2012')
Out[4]: '2012-10-06'

您还可以创建一个使用解析器的DateField:

class YourDateField(models.DateField):
    def get_prep_lookup(self, lookup_type, value):
        if value and '/' in value:
            value = parse_slash_date(value)
        return super(YourDateField, self).get_prep_lookup(
            lookup_type, value)

但是,我很确定DateField能够用斜杠解析日期......但我只是读了django.utils.dateparse.parse_date的代码而它没有。