[Django] Models _meta 활용하기

금지수·2022년 8월 21일
0

Django에서 제공하는 ORM을 이용하여 Models을 정의 할때 Models.object로 다른 내용도 정의 할 수 있지만, _meta를 통해 아래와 같은 내용을 사용할 수 있습니다.

  • 모델의 모든 필드 인스턴스 검색
  • 이름으로 모델의 단일 필드 인스턴스 검색
>>> from django.contrib.auth.models import User

# 모델의 필드
>>> User._meta.get_field('username')
<django.db.models.fields.CharField: username>

# 현재 모델과 관계가있는 다른 모델의 필드
>>> User._meta.get_field('logentry')
<ManyToOneRel: admin.logentry>

# 존재하지 않는 필드
>>> User._meta.get_field('does_not_exist')
Traceback (most recent call last):
    ...
FieldDoesNotExist: User has no field named 'does_not_exist'

_mete에 대해 이해하고 다음과 같이도 사용할 수 있습니다.
어떠한 models의 내용이 엑셀 출력이 필요할 경우
pandas의 DataFrame을 통해 모든 필드를 출력할 경우에 사용할 수 있습니다.

from django.contrib.auth.models import User

all_user_fields = User._meta.get_fields()

header = []
for field in all_user_fields:
	if hasattr(field, 'verbose_name'):
    	header.append(field.verbose_name)

DataFrame의 header 부분에 대해 모든 필드를 values_lists로 받아오고
엑셀의 필드명을 표기해야할 경우 model 등록시 verbose_name을 받아오는 내용입니다.

이와 같이 ORM의 다른 내용도 확인한다면 또 다른 방법으로 활용할 수 있습니다.

profile
언젠간 하겠지

0개의 댓글