我需要能够在我的某些日期时间字段中只写年份,年份和月份(以及标准的完整日期时间值)。像下面这些模式一样。
YYYY
YYYY-MM
YYYY-MM-DD
YYYY-MM-DD HH
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS
在mySQL中,这可以通过使用零来轻松完成,但这在django中不起作用。它是那个不支持它的愚蠢time.datetime python函数。
在django中有一些简单的方法吗?如果没有,是否有一些扩展可以为我做这个?如果没有,我该如何以最佳方式解决这个问题?
如果它是一个完整的数据时间值,它可以处理本地时间的标准化,我会很高兴。这样我就可以在任何地方使用相同的字段。但这并不是非常重要。
答案 0 :(得分:8)
也许这会有所帮助:
DayMonthField和YearField
django-yearlessdate - https://github.com/seddonym/django-yearlessdate
<强> YearMonthField 强>
YEARMONTH_INPUT_FORMATS = (
'%Y-%m', '%m/%Y', '%m/%y', # '2006-10', '10/2006', '10/06'
)
class YearMonthField(CharField):
default_error_messages = {
'invalid': _('Enter a valid year and month.'),
}
def __init__(self, input_formats=None, *args, **kwargs):
super(YearMonthField, self).__init__(*args, **kwargs)
self.input_formats = input_formats
def clean(self, value):
if value in validators.EMPTY_VALUES:
return None
if isinstance(value, datetime.datetime):
return format(value, '%Y-%m')
if isinstance(value, datetime.date):
return format(value, '%Y-%m')
for fmt in self.input_formats or YEARMONTH_INPUT_FORMATS:
try:
date = datetime.date(*time.strptime(value, fmt)[:3])
return format(date, '%Y-%m')
except ValueError:
continue
raise ValidationError(self.error_messages['invalid'])
class MyModel(models.Model):
yearmonth = YearMonthField()
答案 1 :(得分:0)
还有django-monthfield,它使用数据库中的日期字段,但是只选择年份和月份的小部件: