我有使用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]
。
我该怎么做?
答案 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),并且您不一定知道列表从一年到下一年的变化。