models のデータを日付順に並び替える方法を、同日に複数投稿があった場合も考慮して紹介します。
django でデータを日付順(降順)に並び替えたいときは order_by() と reverse() を使用します。
#models.py
class Article(models.Model):
id = models.AutoField(auto_created=True, primary_key=True)
date = models.DateField('日時', auto_now_add=True)
#views.py
def index(request):
data = Article.objects.all().order_by('date').reverse()
ただし、同日に複数のデータがあった場合、このままだと以下のようになります。
ID | 更新日付 |
---|---|
3 | 2023/1/3 |
4 | 2023/1/3 |
5 | 2023/1/3 |
2 | 2023/1/2 |
1 | 2023/1/1 |
2023/1/3 のデータを上から ID:5,4,3 となるように変えたいので、order_by のキーに id を追加します。
#views.py
def index(request):
data = Article.objects.all().order_by('date', 'id').reverse()
ID | 更新日付 |
---|---|
5 | 2023/1/3 |
4 | 2023/1/3 |
3 | 2023/1/3 |
2 | 2023/1/2 |
1 | 2023/1/1 |
想定通りになりました!
ちなみに降順の並び替えは reverse() ではなく order_by のキーの先頭に「-」(= order_by('-date')」 でもいけます。
気に入ったらぜひ共有してください。