Django - 需要只处理年份或年份和月份的日期时间字段
我需要在我的一些日期时间字段中,只写年份,或者年份和月份(除了标准的完整日期时间值)。就像下面这些格式。
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中有没有简单的方法可以做到这一点?如果没有,有没有什么扩展可以帮我实现?如果都没有,那我该怎么以最好的方式解决这个问题呢?
如果它能处理本地时间的标准化问题,那就更好了,前提是它是一个完整的日期时间值。这样我就可以在任何地方使用同一个字段。但这并不是特别重要。
2 个回答
0
还有一个叫做django-monthfield的东西,它在数据库里使用日期字段,但提供了一个工具,让你只选择年份和月份:
9
也许这会对你有帮助:
日月字段和年字段
django-yearlessdate - https://github.com/seddonym/django-yearlessdate
年月字段
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()