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 に答える