默认排序
本课属于 Coddy Django 学习旅程的“模型和管理后台”单元。第 6 课,共 23 课。
书籍返回的顺序并不固定:数据库给出什么顺序就是什么顺序。你可以在模型中设置一次排序顺序,适用于所有未指定其他排序方式的查询。针对整个模型而不是某个字段的选项,要放在名为 Meta 的内部类中:
class Movie(models.Model):
...
class Meta:
ordering = ["-released", "title"]ordering 是一个字段名列表。单独的字段名会按从低到高排序,文本按 A 到 Z 排序;字段名前加减号则按相反方向排序,因此这里会先列出最新上映的电影。第二个字段名用于打破并列:同一天上映的电影按 A 到 Z 排序。
挑战
简单在 books/models.py 中,让书籍在没有指定排序方式时,始终按书名从 A 到 Z 的顺序返回。
点击“运行”,然后在 Shell 选项卡中输入 Book.objects.all():Dune 排在最前面,The Hobbit 排在最后面。
亲手试试
from django.db import models
class Book(models.Model):
class Genre(models.TextChoices):
FICTION = "fiction", "Fiction"
SCIFI = "scifi", "Science fiction"
MYSTERY = "mystery", "Mystery"
HISTORY = "history", "History"
title = models.CharField(max_length=200)
author = models.CharField(max_length=100)
year = models.IntegerField()
price = models.DecimalField(max_digits=6, decimal_places=2)
is_read = models.BooleanField(default=False)
finished = models.DateField(null=True, blank=True)
summary = models.TextField(blank=True)
genre = models.CharField(max_length=20, choices=Genre, default=Genre.FICTION)
def __str__(self):
return f"{self.title} by {self.author}"
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
模型和管理后台中的所有课
自己练习: Django 在线编辑器