Варианты выбора
Часть раздела Модели и панель администратора путешествия по Django на Coddy. Урок 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.
Попробуйте сами
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)
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Модели и панель администратора
1Ваша первая модель
Ваша первая модельТипы полейПотренируйтесь самостоятельно: Песочница Django