我将日期存储为格式为YYMMDD的整数字段,其中月份或日期是可选的。
我有以下格式化数字的功能:
def flexibledateformat(value):
import datetime, re
try:
value = str(int(value))
except:
return None
match = re.match(r'(\d{4})(\d\d)(\d\d)$',str(value))
if match:
year_val, month_val, day_val = [int(v) for v in match.groups()]
if day_val:
return datetime.datetime.strftime(datetime.date(year_val,month_val,day_val),'%b %e, %Y')
elif month_val:
return datetime.datetime.strftime(datetime.date(year_val,month_val,1),'%B %Y')
else:
return str(year_val)
其结果如下:
>>> flexibledateformat(20100415)
'Apr 15, 2010'
>>> flexibledateformat(20100400)
'April 2010'
>>> flexibledateformat(20100000)
'2010'
所以我想知道在model field类下是否有一个函数可以自动调用
flexibledateformat
.
所以如果有记录
R=数据记录(name='foo',date=20100400)
当以形式处理时,值将
20100400
但在模板中输出时使用
{{ r.date }}
它显示为“2010年4月”。
进一步澄清
我通常使用date time来存储日期/时间值。在这种情况下,我需要记录
非特定日期
:
X
发生在2009年“,
Y
发生在1996年6月的某个时候。
最简单的方法是在保留日期字段的大部分功能(包括排序和筛选)的同时,使用以下格式的整数:
yyyymmdd
. 这就是为什么我使用
IntegerField
而不是
DateTimeField
.
这就是我希望发生的事情:
-
我存储我所说的“灵活”
在A中的日期
FlexibleDateField
作为一个
带格式的整数
出生年月日
.
-
我呈现一个包含
flexibledateField和值
保持整数,以便函数
验证它所必需的
在小部件工作中呈现它
正确地。
-
我称之为模板,
如object.flexibledate和
它是根据
灵活日期格式规则:
20100416
->2010年4月16日;
二千零一十万零四百
->2010年4月;
20100000
-gt;2010。这个
也适用于我不打电话的时候
直接,例如当它被用作
管理中的标题
(
http://example.org/admin/app_name/model_name/
)
我不知道这些具体的事情是否可行。
阿尔索
我已经编写了一个模板过滤器,可以执行此功能--
(
{{object.flexibledate|flexibledateformat}}
————
但我不想每次输出这些值时都调用过滤器。除了输出表单时,我几乎不想看到数字。