选项
本课属于 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() 会返回某一行对应的标签。
挑战
简单为 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)
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
模型和管理后台中的所有课
自己练习: Django 在线编辑器