Cách sách được in
Thuộc phần Model và trang quản trị trong hành trình Django của Coddy. Bài học 5 trên 23.
Nhấn Chạy rồi nhập Book.objects.all() vào thẻ Shell: mỗi cuốn sách đều hiển thị <Book: Book object (1)>, nên bạn không thể phân biệt chúng. Book.objects.all() yêu cầu tất cả sách; chương tiếp theo sẽ giải thích điều này. Python chuyển một đối tượng thành văn bản bằng phương thức (method) __str__, còn phương thức mà mỗi mô hình (model) đều có chỉ hiển thị id. Một mô hình có thể tự định nghĩa phương thức này. Movie trên trang web phim có thể in ra tên phim và năm phát hành:
class Movie(models.Model):
...
def __str__(self):
return f"{self.title} ({self.released.year})"Khi đó, Shell hiển thị <Movie: Alien (1979)>, và trang quản trị cùng mọi template in ra {{ movie }} cũng hiển thị như vậy. __str__ phải trả về văn bản. Một phương thức in văn bản ra sẽ trả về None, khiến str() gặp lỗi TypeError.
Thử thách
DễTrong books/models.py, hãy để sách được in ra theo dạng tiêu đề, by và tên tác giả: Dune by Frank Herbert.
Nhấn Chạy rồi nhập Book.objects.all() trong thẻ Shell: giờ mỗi cuốn sách sẽ hiển thị như <Book: Dune by Frank Herbert>.
Tự làm thử
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)
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