我正在编写一个django应用程序,其中存储了基于日期时间字段的记录。
first_record = MyModel.objects.filter().order_by('-added').first()
first_record = (first_record.added.month, first_record.added.year)
last_record = MyModel.objects.filter().order_by('-added').first()
last_record = (last_record.added.month, last_record.added.year)
现在我想列出第一张唱片和最后一张唱片之间的所有月份/年份。一个粗略的想法是:
for i in range(first_record, last_record):
# do something
范围函数应该给我一个要迭代的列表,如下所示:
[('01','2018'),('02','2018'),('03','2018'),....,('11','2020'),('12','2020')]
你知道我该怎么做吗?
(last_record.added.month, last_record.added.year)
也是获取包含月份和年份的元组的正确方法。请注意,我希望月份的格式为01
,而不是第一个月的1
。
我相信Django有一个内置的函数。你可以做:
>>> Entry.objects.dates('pub_date', 'month')
[datetime.date(2005, 2, 1), datetime.date(2005, 3, 1)]
>>> Entry.objects.dates('pub_date', 'week')
[datetime.date(2005, 2, 14), datetime.date(2005, 3, 14)]
翻译成你的代码,会有点像
MyModel.objects.dates('added', 'month')
文档
您可以使用dateutil.rerelativelta这是代码
from dateutil.relativedelta import relativedelta
import datetime
result = []
today = datetime.date.today()
current = datetime.date(2010, 8, 1)
while current <= today:
result.append(current)
current += relativedelta(months=1)
了解更多abouhttps://dateutil.readthedocs.io/en/latest/relativedelta.html