Menu
CoddyTech

책이 출력되는 방식

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

‘실행’을 누르고 셸 탭에 Book.objects.all()을 입력해 보세요. 모든 책이 <Book: Book object (1)>로 표시되어 서로 구분할 수 없습니다. Book.objects.all()은 모든 책을 요청하며, 다음 장에서 이에 대해 설명합니다. Python은 객체를 텍스트로 바꿀 때 객체의 __str__ 메서드를 사용합니다. 모든 모델에 제공되는 이 메서드는 ID만 표시합니다. 모델은 자체 메서드를 정의할 수 있습니다. 영화 사이트의 Movie는 제목과 연도를 출력할 수 있습니다.

class Movie(models.Model):
    ...

    def __str__(self):
        return f"{self.title} ({self.released.year})"

그러면 셸에는 <Movie: Alien (1979)>이 표시되며, 관리자 페이지와 {{ movie }}를 출력하는 모든 템플릿에도 똑같이 표시됩니다. __str__은 텍스트를 반환해야 합니다. 텍스트를 출력하는 메서드는 None을 반환하므로, 그러면 str()이 TypeError를 발생시킵니다.

challenge icon

챌린지

쉬움

books/models.py에서 책이 제목, by, 저자 순으로 출력되도록 만드세요. 예: Dune by Frank Herbert.

‘실행’을 누르고 셸 탭에 Book.objects.all()을 입력하세요. 이제 각 책이 <Book: Dune by Frank Herbert>처럼 표시됩니다.

직접 해보기

from django.db import models


class Book(models.Model):
    class Genre(models.TextChoices):
        FICTION = "fiction", "Fiction"
        SCIFI = "scifi", "Science fiction"
        MYSTERY = "mystery", "Mystery"
        HISTORY = "history", "History"

    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)
    genre = models.CharField(max_length=20, choices=Genre, default=Genre.FICTION)

모델과 관리자의 모든 레슨

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