如何在django中显示特定日期范围的月份列表?

时间:2018-12-06 11:01:07

标签: django django-models django-views django-queryset

假设我有一个模型:

class Order(models.Model):
created = model.DateTimeField(auto_now_add=True)
total = models.IntegerField()

我的查询是:

qs= Order.objects.filter(created__range=('2018,11,1','2019,11,1'))

我想在我的模板中查看上述查询中给出的日期范围内的所有月份...

如何在Django中实现这一目标?

有什么主意吗?

2 个答案:

答案 0 :(得分:1)

您只需要从查询集中每个条目的month字段中提取created

import datetime

qs= Order.objects.filter(created__range=(datetime.date(2018,11,1),datetime.date(2019,11,1)))

months = []
for order in qs:
  months.append(order.created.month)
  ...

months看起来像这样:[6, 10, 11, 4, 4, 4, 9, 10, 2, 4, 4, 11, 4]

如果您希望月份采用其他格式[January, May, etc.] 在此处查看 DateFormat 段落:https://simpleisbetterthancomplex.com/article/2016/08/10/exploring-django-utils-1.html

答案 1 :(得分:1)

您可以做一件事

>>> from datetime import datetime, timedelta
>>> from collections import OrderedDict
>>> dates = ["2014-10-10", "2016-01-07"]
>>> start, end = [datetime.strptime(_, "%Y-%m-%d") for _ in dates]
>>> OrderedDict(((start + timedelta(_)).strftime(r"%b-%y"), None) for _ in 
xrange((end - start).days)).keys()
['Oct-14', 'Nov-14', 'Dec-14', 'Jan-15', 'Feb-15', 'Mar-15', 'Apr-15', 'May-
15', 'Jun-15', 'Jul-15', 'Aug-15', 'Sep-15', 'Oct-15', 'Nov-15', 'Dec-15', 
'Jan-16']