[django] 장고 모델의 클래스 이름 가져 오기

장고 모델이 있습니다.

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

모델 이름을 문자열 ‘Book’으로 지정하고 싶습니다. 이런 식으로 얻으려고 할 때 :

Book.__class__.__name__

‘ModelBase’를 반환합니다.

어떤 생각?



답변

시도해보십시오 Book.__name__.

Django 모델은 ModelBase모든 모델의 Metaclass 인 에서 파생됩니다 .


답변

Book.__class__.__name__수업 자체에서 수행하는 대신 책 객체에 book_object.__class__.__name__대해 수행하면 ‘Book'(즉, 모델 이름)이 제공됩니다.


답변

에 의해 제안 된 것과 같은 위의 대답은 , 당신은 사용할 수 있습니다 str(Book._meta).

이 질문은 꽤 오래되었지만 여러 앱에서 동일한 모델 이름을 가질 수 있으므로 다음이 도움이된다는 것을 알았습니다 (Django 1.11에서 테스트되었지만 이전 버전에서 작동 할 수 있습니다 …).

책이 다음 위치에 있다고 가정합니다 my_app.

print(Book._meta.object_name)
# Book

print(Book._meta.model_name)
# book

print(Book._meta.app_label)
# my_app


답변

사용하여 클래스 이름을 얻었습니다.

str(Book._meta)

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


답변

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

이런 식으로 book.class_name()파이썬 코드 (템플릿에서도) 를 호출 할 때마다 {{book.class_name}}‘Book’이라는 클래스 이름을 반환합니다.


답변

모델의 Meta 클래스에서 모델 이름을 검색 할 수도 있습니다. 이것은 모델 클래스 자체와 그것의 모든 인스턴스에서 작동합니다.

# 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

설정 verbose_nameverbose_name_plural선택 사항입니다. Django는 모델 클래스의 이름에서 이러한 값을 유추합니다 (관리 사이트에서 이러한 값을 사용하는 것을 눈치 챘을 수 있습니다).

https://docs.djangoproject.com/en/3.0/ref/models/options/#verbose-name


답변