Django 模型 DateField to_python

Posted

技术标签:

【中文标题】Django 模型 DateField to_python【英文标题】:Django Model DateField to_python 【发布时间】:2012-06-13 23:35:23 【问题描述】:

我正在开发 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】:

你可以使用这个函数来转换日期:

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 的代码,它没有。

【讨论】:

以上是关于Django 模型 DateField to_python的主要内容,如果未能解决你的问题,请参考以下文章

Django 模型 DateField to_python

我的 django 模型 DateField 如何将 30 天添加到提供的值?

Django 2.0 ModelForm dateField 不显示为小部件

Django rest框架DateField格式

为啥 DateField 数据类型在模型方法和视图中不同?

Django 模型:可空字段