1

我有带 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]

我该怎么做?

4

2 回答 2

2

你想按时间顺序排列它们第一次出现的月份吗?

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

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

于 2013-08-24T09:13:20.853 回答
0

唯一的方法是添加年份:

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 个),并且您不一定知道列表从一年到下一年的变化。

于 2013-08-24T09:08:13.557 回答