Menu
CoddyTech

选项

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

类型应当是少数几个值之一,而不是任意文本。choices 选项会将字段限制为一个列表,并通过枚举类给出。电影网站可以限制电影的适合人群:

class Movie(models.Model):
    class Age(models.TextChoices):
        ALL = "all", "All ages"
        TEEN = "teen", "13 and over"
        ADULT = "adult", "18 and over"

    age = models.CharField(max_length=10, choices=Age, default=Age.ALL)

每个成员都有存储在数据库中的值 "teen",以及供人阅读的标签 "13 and over"。在代码中,你可以写 Movie.Age.TEEN,这样拼写错误会导致错误,而不会产生新值。这个类要写在使用它的字段之前。

表单和管理界面会在下拉列表中显示这些标签,并拒绝其他值;数据库本身不会进行检查。movie.get_age_display() 会返回某一行对应的标签。

challenge icon

挑战

简单

为 Book 添加一个类型。在 Book 顶部的字段上方,编写一个选项类 Genre:

  • FICTION:"fiction","Fiction"
  • SCIFI:"scifi","Science fiction"
  • MYSTERY:"mystery","Mystery"
  • HISTORY:"history","History"

然后添加一个字段 genre,最多 20 个字符,并限制为这些选项之一,默认值为 fiction,除非你选择其他选项。

在 Shell 选项卡中输入 Book.Genre.SCIFI.label:它会打印 'Science fiction'。

亲手试试

from django.db import models


class Book(models.Model):
    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)
quiz icon自我测试

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

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

自己练习: Django 在线编辑器