인프런 커뮤니티 질문&답변

zxpjh0323님의 프로필 이미지
zxpjh0323

작성한 질문수

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

포스팅 좋아요/취소 구현

User Model 호출 방법

해결된 질문

작성

·

151

0

안녕하세요 강사님 User를 호출하는 과정에 관한 질문입니다.

1. User를 직접 호출

2. settings.AUTH_USER_MODEL

3. get_user_model()

 

위 세가지 방법이 모두 같은 User 모델을 불러오는 것이 맞는지, 언제 어떤 방법을 사용하면 좋은지 궁금합니다.

이전 영상에서는 User를 직접 호출하신적이 있는데 바로 호출해도 되는 때, 안되는 때가 언제인지 궁금합니다. 

답변 1

1

이진석님의 프로필 이미지
이진석
지식공유자

안녕하세요.

django.contrib.auth 앱에서는 기본 User 모델을 제공해주고 있구요. 우리의 장고 프로젝트에서는 Custom User 모델을 정의하여, 이를 프로젝트의 User 모델로 지정할 수 있습니다.

프로젝트의 User 모델로 정의하는 방법은 settings 내에 AUTH_USER_MODEL 문자열 값을 설정하는 것이죠. 포맷은 "앱이름.모델명" 형식의 문자열입니다.

프로젝트에서 User 모델을 변경될 수 있습니다. 변경될 수 있기에 django.contrib.auth 앱의 User 모델을 직접 임포트하는 것은 적절하지 못한 접근입니다. 프로젝트에 따라 User 모델이 변경될 수 있기 때문이죠. 대개의 장고 프로젝트에서는 Custom User 모델을 정의하여 사용합니다.

위에서 살펴본 바와 같이 현재 프로젝트에 설정된 User 모델 클래스를 참조하는 방법은 settings.AUTH_USER_MODEL 문자열 값을 통해 모델 클래스를 임포트하는 것입니다.

장고의 모델 관계필드(models.ForeignKey, ManyToManyField, OneToOneField)에서는 관계되는 모델 클래스를 문자열로 지정할 수도 있고, 직접적으로 모델 클래스를 지정하실 수도 있습니다. 문자열로 지정하면, 장고 내부적으로 해당 클래스를 임포트하여 지정됩니다.

그러니,

1. User를 직접 호출 => 프로젝트에 따라 User 모델 클래스가 바뀔 수 있기에, 적절치 못한 접근입니다.

2. settings.AUTH_USER_MODEL 문자열 => 관계필드는 문자열로도 지정할 수 있기에 이 방법은 유효한 방법입니다.

3. get_user_model() => 내부적으로 settings.AUTH_USER_MODEL 값을 참조하여 모델 클래스를 반환합니다. 이 방법 역시 유효한 방법입니다.
 - get_user_model 코드 보기 : https://github.com/django/django/blob/4.0.6/django/contrib/auth/__init__.py#L170

 코드를 쓰실 때

 User 모델 클래스가 직접적으로 필요하시면 get_user_model() 을 통해 User 모델 클래스를 임포트하여 사용하시면 되구요.

 관계필드에 User 모델 클래스를 지정하실 때에는 2번/3번 방법 둘 다 됩니다.

 

 화이팅입니다. :-)

 

ps. 본 질문이 해결되셨다면, 본 질문의 상태를 해결됨으로 변경 부탁드립니다.

zxpjh0323님의 프로필 이미지
zxpjh0323

작성한 질문수

질문하기