Lựa chọn
Thuộc phần Model và trang quản trị trong hành trình Django của Coddy. Bài học 4 trên 23.
Thể loại chỉ nên có một vài giá trị, không phải văn bản tùy ý. Tùy chọn choices giới hạn một trường vào một danh sách, được khai báo bằng một lớp liệt kê. Một trang web về phim có thể giới hạn độ tuổi phù hợp với phim:
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)Mỗi thành viên có giá trị được lưu trong cơ sở dữ liệu, "teen", và nhãn để mọi người đọc, "13 and over". Trong code, bạn viết Movie.Age.TEEN, nên lỗi gõ sai sẽ gây ra lỗi thay vì tạo một giá trị mới. Lớp này nằm trước trường sử dụng nó.
Biểu mẫu và trang quản trị hiển thị các nhãn trong danh sách thả xuống và từ chối các giá trị khác, nhưng bản thân cơ sở dữ liệu không kiểm tra. movie.get_age_display() trả về nhãn của một hàng.
Thử thách
DễThêm thể loại cho Book. Viết lớp lựa chọn Genre ở đầu Book, phía trên các trường:
FICTION:"fiction","Fiction"SCIFI:"scifi","Science fiction"MYSTERY:"mystery","Mystery"HISTORY:"history","History"
Sau đó thêm trường genre, tối đa 20 ký tự, chỉ giới hạn trong các lựa chọn đó, mặc định là fiction trừ khi bạn chọn giá trị khác.
Trong thẻ Shell, nhập Book.Genre.SCIFI.label: kết quả in ra là 'Science fiction'.
Tự làm thử
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)
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Model và trang quản trị
1Mô hình đầu tiên của bạn
Mô hình đầu tiên của bạnCác kiểu trườngTự luyện tập: Playground Django