inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

Django Form

class Meta에 대해 질문입니다.

386

김영빈

작성한 질문수 49

0

10:54의 내용을 10:57에 심플하게 바꿀 수 있다고 해주셨는데요

클래스 내부에 클래스가 들어잇는 문법을 처음봐서 찾아보려는데 키워드를 잘모르겠네요

혹시 '메타클래스'라는게 맞을까요? 이렇게 저렇게 찾아봐도 메타클래스에 관한 부분인 것 같긴한데, 또 찾는 자료들에서는 설명해주신 방식으로 메타클래스를 사용하는 걸 못봐가지구요

python django docker react

답변 1

0

이진석

안녕하세요.

클래스 안에 Meta 라는 이름의 클래스를 선언하는 것의 장고 만의 약속입니다. 클래스 안에 클래스를 선언하는 단순한 문법이며, 클래스 변수 문법을 통해 이해할 수 있습니다. 파이썬 고급 문법 중에 metaclass 문법와는 관련이 없습니다.

장고는 모델 클래스나 ModelForm 클래스에 대한 메타정보(설정)를 저장할 방법으로서 클래스 문법을 사용한 것 뿐입니다. 아래의 코드는 PostForm 클래스에 대한 메타정보로서 참조할 model 로서 Post 클래스를 사용하고, 참조할 fields는 ["title"] 를 참조하겠다는 일종의 선언입니다.

class Meta 는 클래스지만 인스턴스를 만드는 목적으로 사용하지는 않습니다. 클래스 변수로서만 사용합니다.

아래는 파이썬 클래스에서 var1 는 클래스 변수이며, var2 는 인스턴스 변수입니다. var1은 클래스 변수이기에 Person.var1 과 같이 접근할 수 있습니다.

위 PostForm 의 Meta 역시 PostForm 입장에서는 클래스 변수 공간에 Meta가 정의된 것입니다. 그래서 PostForm.Meta 형태로서 접근할 수 있습니다. PostForm.Meta.model 과 같은 접근도 가능하겠죠.

화이팅입니다. :-)

0

김영빈

답변감사합니다. 덕분에 시간을 아낄 수 있었네요.

답변을 보니 여쭤보고 싶은 내용이 생겼는데요, 저러한 방식의 문법(중첩클래스라 부르겠습니다)이 클래스전체에서 통용되는 클래스변수를 선언하기 위함이라하면, 굳이 중첩클래스를 사용할 필요가 있나요? 그냥 클래스변수로서 바로 클래스내부에 바로 선언해주면 되는 것이 아닌지 궁금합니다.

0

이진석

PostForm.Meta.model 과 같은 형태는 2 depth 인데요. 클래스 변수로서 직접 세팅하는 것은 1 depth 씩 밖에 되질 않으니 더 번거로울 수 있습니다. 장고 내부적으로 getattr(new_class, "Meta", None) 과 같이 Meta 속성을 참조하고 있기도 하구요.

그리고 abstract 모델을 상속 시에 Meta 클래스를 상속받는 코드를 작성하기도 합니다.

0

김영빈

감사합니다~

안녕하세요.

0

62

1

[OneToOne Field Demo] get_user_model() 메서드를 활용해야 하는 이유?

0

282

1

useEffect 훅에서 else 유무에 따른 결과

0

221

1

useAxios 훅의 dependency array 설정

0

254

1

useEffect에서 변수 업데이트 관련 질문

0

385

1

rest_framework.generics.CreateAPIView의 model 속성 유무

0

273

1

bootstrap4

0

479

4

리뉴얼 강의가 오픈이 되면 기존 강의는 더이상 못보는걸까요

1

373

1

admin form에서 앞선 필드 선택 후 다른 필드 select widget 구성하는 방법

0

577

3

useState는 필수일까요?

0

269

1

python manage.py makemigrations instagram 시 created_at default 오류가 발생합니다.

0

606

4

Django allauth를 사용한 소셜 로그인 시 에러

0

657

1

프로젝트명 변경 뒤, 디버그툴바+디버그모드 사용 시 에러

0

561

2

useLocalStorage() 함수 사용여부

0

233

1

django에 LOGIN_URL = '/accounts/login/'의 의미?

0

451

1

리듀서의 의미 재확인

0

435

1

simple-jwt Refresh Token 사용 노하우

0

903

2

docker compose 를 통한 배포 관련 오류 문의

0

683

1

파이썬 속도 장고 관련 궁금한게 있습니다.

0

368

1

is_like_user

0

236

1

related_name 오류

0

276

1

re_path 오류

0

263

1

re_path url

0

252

1

No post matches the given query

0

667

2