Menu
CoddyTech

默认排序

本课属于 Coddy Django 学习旅程的“模型和管理后台”单元。第 6 课,共 23 课。

书籍返回的顺序并不固定:数据库给出什么顺序就是什么顺序。你可以在模型中设置一次排序顺序,适用于所有未指定其他排序方式的查询。针对整个模型而不是某个字段的选项,要放在名为 Meta 的内部类中:

class Movie(models.Model):
    ...

    class Meta:
        ordering = ["-released", "title"]

ordering 是一个字段名列表。单独的字段名会按从低到高排序,文本按 A 到 Z 排序;字段名前加减号则按相反方向排序,因此这里会先列出最新上映的电影。第二个字段名用于打破并列:同一天上映的电影按 A 到 Z 排序。

challenge icon

挑战

简单

在 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}"
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

模型和管理后台中的所有课

自己练习: Django 在线编辑器