Jawaban:
Alih-alih melakukannya Book.__class__.__name__
di kelas itu sendiri, jika Anda melakukannya di atas objek buku, maka Anda book_object.__class__.__name__
akan memberi Anda 'Buku' (yaitu nama model)
Seperti yang disarankan oleh jawaban di atas , Anda dapat menggunakan str(Book._meta)
.
Pertanyaan ini cukup lama, tetapi saya menemukan yang berikut berguna (diuji pada Django 1.11, tetapi mungkin bekerja pada yang lebih lama ...), karena Anda mungkin juga memiliki nama model yang sama dari banyak aplikasi.
Dengan asumsi Buku ada di my_app
:
print(Book._meta.object_name)
# Book
print(Book._meta.model_name)
# book
print(Book._meta.app_label)
# my_app
2.2.3
juga.
Saya mendapatkan nama kelas dengan menggunakan,
str(Book._meta)
Book.__class__.__name__ -> this will give you the ModelBase
str(self.model._meta)
adalah apa yang saya cari; Adapun yang lain beri aku kelas orang tua.
Book._meta.object_name
atau Book._meta.model_name
. Kemudian jika Anda menginginkan nama aplikasinya juga, itu dapat diakses melaluiBook._meta.app_label
Anda juga dapat mengambil nama model dari kelas Meta model. Ini berfungsi pada kelas model itu sendiri serta setiap instance-nya:
# 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
Pengaturan verbose_name
dan verbose_name_plural
bersifat opsional. Django akan menyimpulkan nilai-nilai ini dari nama kelas model (Anda mungkin telah memperhatikan penggunaan nilai-nilai itu di situs admin).
https://docs.djangoproject.com/en/3.0/ref/models/options/#verbose-name