假设我有一个模型:
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中实现这一目标?
有什么主意吗?
答案 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']