Câu trả lời:
Thay vì thực hiện Book.__class__.__name__
trên chính lớp, nếu bạn thực hiện trên một đối tượng sách, thì book_object.__class__.__name__
sẽ cung cấp cho bạn 'Sách' (tức là tên của mô hình)
Theo gợi ý của câu trả lời ở trên , bạn có thể sử dụng str(Book._meta)
.
Câu hỏi này khá cũ, nhưng tôi thấy câu hỏi sau hữu ích (đã thử nghiệm trên Django 1.11, nhưng có thể hoạt động trên các phiên bản cũ hơn ...), vì bạn cũng có thể có cùng một tên kiểu máy từ nhiều ứng dụng.
Giả sử Sách ở my_app
:
print(Book._meta.object_name)
# Book
print(Book._meta.model_name)
# book
print(Book._meta.app_label)
# my_app
2.2.3
.
Tôi có tên lớp bằng cách sử dụng,
str(Book._meta)
Book.__class__.__name__ -> this will give you the ModelBase
str(self.model._meta)
là những gì tôi đang tìm kiếm; như đối với cái khác cho tôi lớp cha.
Book._meta.object_name
hoặc Book._meta.model_name
. Sau đó, nếu bạn muốn tên ứng dụng, có thể truy cập thông quaBook._meta.app_label
Bạn cũng có thể truy xuất tên mô hình từ lớp Meta của mô hình. Điều này hoạt động trên chính lớp mô hình cũng như bất kỳ trường hợp nào của nó:
# Model definition
class Book(models.Model):
# fields...
class Meta:
verbose_name = 'book'
verbose_name_plural = 'books'
# Get some model
book = Book.objects.first()
# Get the model name
book._meta.verbose_name
Cài đặt verbose_name
vàverbose_name_plural
là tùy chọn. Django sẽ suy ra các giá trị này từ tên của lớp mô hình (bạn có thể nhận thấy việc sử dụng các giá trị đó trong trang web quản trị).
https://docs.djangoproject.com/en/3.0/ref/models/options/#verbose-name