如何从django的DateField不同年份获得正确的月份?

时间:2013-08-24 08:21:20

标签: django datefield

我有使用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]

我该怎么做?

2 个答案:

答案 0 :(得分:2)

你是按照按时间顺序首次出现的顺序来计算月份?

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

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

答案 1 :(得分: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年和2013年都会出现重复,例如8),并且您不一定知道列表从一年到下一年的变化。