获取范围内的所有月份和年份

时间:2020-07-29 00:59:24

标签: python django django-models

我正在编写一个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的月份。

2 个答案:

答案 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')

Documentation

答案 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

相关问题