Câu hỏi Lấy tên lớp của mô hình django


Tôi có một mô hình django:

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

và tôi muốn có tên mẫu là chuỗi: 'Sách'. Khi tôi cố gắng làm theo cách này:

Book.__class__.__name__

nó trả về 'ModelBase'.

Bất kỳ ý tưởng?


76
2017-08-30 10:25


gốc




Các câu trả lời:


Thử Book.__name__.

Mô hình Django bắt nguồn từ ModelBase, đó là Metaclass cho tất cả các mô hình.


105
2017-08-30 10:29





Thay vì làm Book.__class__.__name__ trên chính lớp học, nếu bạn làm điều đó qua 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)


39
2017-10-21 06:41



Điều này đã giúp tôi trong trường hợp của tôi. Tôi đã hợp nhất 2 queryset có các mô hình khác nhau. Trong một vòng lặp, tôi cần thiết để có được tên lớp của đối tượng khi tôi đang lặp lại. - Peter
Peter, làm thế nào bạn kết hợp hai queryset ?? Hoặc là tập hợp được hợp nhất chỉ là một danh sách các cá thể mô hình? Cảm ơn - little_birdie


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

4
2017-07-26 07:59



Cảm ơn; str(self.model._meta) là những gì tôi đang tìm kiếm; cho người khác cho tôi lớp cha mẹ. - ppython
Nếu bạn muốn một cái gì đó ngầm hơn một cuộc gọi đến chuỗi, sau đó bạn có thể nhận được như vậy (đã thử trên Django 1,11) với: Book._meta.object_name hoặc là Book._meta.model_name. Sau đó, nếu bạn muốn tên ứng dụng là tốt, đó là có thể truy cập thông qua Book._meta.app_label - Geekfish


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

Bằng cách này, bất cứ khi nào bạn gọi book.class_name (cũng có trong mẫu {{book.class_name}}) nó sẽ trả về tên lớp là 'Sách'.


1
2018-01-30 11:25





Theo đề xuất của trả lời ở trên, bạn có thể dùng str(Book._meta).

Câu hỏi này khá cũ, nhưng tôi thấy những điều sau hữu ích (thử nghiệm trên Django 1.11, nhưng có thể làm việc trên cũ ...), vì bạn cũng có thể có cùng một tên mẫu từ nhiều ứng dụng.

Giả sử sách đang ở 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