我正在编写一个django应用程序,其中存储了基于datetimefield的记录。
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
应该在range函数给我一个列表进行迭代的地方,如下所示:
[('01','2018'),('02','2018'),('03','2018'),....,('11','2020'),('12','2020')]
有什么想法我该怎么做?
(last_record.added.month, last_record.added.year)
也是获取包含月份和年份的元组的正确方法。请注意,例如,我希望第一个月的格式为01
而不是1
的月份。
答案 0 :(得分:4)
我相信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')
答案 1 :(得分:0)
您可以使用dateutil.relativedelta来完成此操作 这是代码
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)
了解更多 https://dateutil.readthedocs.io/en/latest/relativedelta.html