Menu
CoddyTech

선택 항목

Coddy Django 여정의 모델과 관리자 섹션에 포함된 레슨. 23개 중 4번째.

장르는 아무 텍스트나 가능한 것이 아니라 몇 가지 값 중 하나여야 합니다. 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").
  • 최대 20자이며 해당 선택 항목으로 제한되고, 다른 항목을 선택하지 않으면 fiction으로 설정되는 genre 필드를 만드세요.

셸 탭에서 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)
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

모델과 관리자의 모든 레슨

직접 연습해 보세요: Django 플레이그라운드