【问题标题】:How to obtain months in right order from different years from DateField in django?如何从 django 中的 DateField 以正确的顺序从不同年份获取月份?
【发布时间】:2013-08-27 07:30:24
【问题描述】:

我有带 DateField 的 django 模型。我可以通过这种方式获取对象月份的列表:

months = [i.month for i in MyModel.objects.values_list('date', flat=True)]

删除重复项后,我收到这样的列表(示例):[1, 2, 5, 6, 7, 9]

但如果我有不同的年份,我想按正确的日期顺序接收月份。例如:

date1=31.08.2012, date2=31.12.2012, date3=05.05.2013.

所以我想接收的不是[5, 8, 12],而是[8, 12, 5]

我该怎么做?

【问题讨论】:

    标签: django datefield


    【解决方案1】:

    唯一的方法是添加年份:

    dates = [(i.year, i.month) for i in MyModel.objects.values_list('date', flat=True)]
    

    这将返回此列表(删除并排序重复项后):

    [(2012, 8), (2012, 12), (2013, 5)]
    

    如果您以后想要,您可以通过以下方式获得月份:

    >>> [x[1] for x in dates]
    [8, 12, 5]
    

    但请注意,该列表中也可能存在重复项(例如,2012 年 8 月和 2013 年 8 月都会出现 8 个),您不一定知道该列表从一年到下一年的变化。

    【讨论】:

      【解决方案2】:

      您想按时间顺序排列月份?

      list(set(date.month for date in MyModel.objects.order_by("date").values_list('date', flat=True)))
      

      按年份排序与按日期排序相同。耶!

      【讨论】:

        猜你喜欢
        • 2019-02-09
        • 2013-08-26
        • 2011-01-11
        • 2020-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多