Pertanyaan Dapatkan nama kelas model Django


Saya memiliki model Django:

class Book(models.Model):
  [..]

dan saya ingin memiliki nama model sebagai string: 'Buku'. Ketika saya mencoba mendapatkannya dengan cara ini:

Book.__class__.__name__

ia mengembalikan 'ModelBase'.

Ada ide?


76
2017-08-30 10:25


asal


Jawaban:


Mencoba Book.__name__.

Model Django berasal dari ModelBase, yang merupakan Metaclass untuk semua model.


105
2017-08-30 10:29



Daripada melakukan Book.__class__.__name__ di kelas itu sendiri, jika Anda melakukannya di atas objek buku, lalu book_object.__class__.__name__ akan memberi Anda 'Buku' (misal nama model)


39
2017-10-21 06:41



Saya mendapat nama kelas dengan menggunakan,

str(Book._meta)

Book.__class__.__name__  -> this will give you the ModelBase

4
2017-07-26 07:59



class Book(models.Model):
  [..]   
  def class_name(self):
    return self.__class__.__name__

Dengan cara ini, setiap kali Anda memanggil book.class_name (juga di dalam template {{book.class_name}}) Ini akan mengembalikan nama kelas yaitu 'Buku'.


1
2018-01-30 11:25



Seperti yang disarankan oleh jawab di atas, Kamu dapat memakai str(Book._meta).

Pertanyaan ini cukup lama, tetapi saya menemukan hal berikut berguna (diuji pada Django 1.11, tetapi mungkin bekerja pada yang lebih tua ...), karena Anda mungkin juga memiliki nama model yang sama dari beberapa aplikasi.

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

print(Book._meta.app_label)
# my_app.Book

1
2018-05-03 11:58