[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_name
및 verbose_name_plural
선택 사항입니다. Django는 모델 클래스의 이름에서 이러한 값을 유추합니다 (관리 사이트에서 이러한 값을 사용하는 것을 눈치 챘을 수 있습니다).
https://docs.djangoproject.com/en/3.0/ref/models/options/#verbose-name