【问题标题】:How to display the months list from a specific daterange in django?如何在 django 中显示特定日期范围的月份列表?
【发布时间】:2018-12-06 11:01:07
【问题描述】:

假设我有一个模型:

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 中做到这一点?

有什么想法吗?

【问题讨论】:

  • 这里的输出应该是什么?一个包含例如 [11, 1, 3,4,7,8] 的迭代,因为只有这个(假设的)数据的订单?
  • 这只是一个例子...我想在 '2018,11,1' , '2019,11,1' 内显示所有月份...如我的查询中给出的...输出应该像十一月,十二月等等......
  • 但只针对有订单的?
  • 没有给定日期范围内的所有月份...
  • 那我不明白你为什么要为此使用查询,这与查询无关。

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


【解决方案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']

【讨论】:

    【解决方案2】:

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

    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

    【讨论】:

    • @NiladryKar 更新了答案。问题出在您的查询中。您应该使用datetime 以正确的格式传递日期。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    相关资源
    最近更新 更多