get_user_model vs settings를 사용하는 Django.AUTH_USER_MODEL
장고 설명서 읽기:
get_user_model()
사용자를 직접 참조하는 대신 django.contrib을 사용하여 사용자 모델을 참조해야 합니다.auth.get_user_model().이 메서드는 현재 활성 사용자 모델(지정된 경우 사용자 지정 사용자 모델)을 반환하고 그렇지 않은 경우 사용자를 반환합니다.
사용자 모델에 대한 외부 키 또는 다대다 관계를 정의할 때는 AUTH_USER_MODEL 설정을 사용하여 사용자 지정 모델을 지정해야 합니다.
저는 위의 문자와 혼동됩니다.제가 이렇게 해야 하나요?
author = models.ForeignKey(settings.AUTH_USER_MODEL)
아니면 이건...
author = models.ForeignKey(get_user_model())
둘 다 효과가 있는 것 같습니다.
사용.settings.AUTH_USER_MODEL
모든 앱이 로드될 때까지 실제 모델 클래스의 검색이 지연됩니다. get_user_model
앱을 처음 가져오는 순간 모델 클래스를 검색하려고 시도합니다.
get_user_model
그것을 보장할 수 없습니다.User
모델이 이미 앱 캐시에 로드되었습니다.사용자의 특정 설정에서 작동할 수도 있지만 히트 앤 미스 시나리오입니다.일부 설정(예: 순서)을 변경하는 경우INSTALLED_APPS
) 가져오기 작업이 중단될 수 있으므로 디버깅에 추가 시간을 할애해야 합니다.
settings.AUTH_USER_MODEL
문자열을 외부 키 모델로 전달하며, 이 외부 키를 가져올 때 모델 클래스의 검색이 실패하면 모든 모델 클래스가 캐시에 로드될 때까지 검색이 지연됩니다.
장고 1.11 이후로 새로워졌습니다.
장고 1.11 이후로 두 가지 경우 모두 사용할 수 있습니다!그러니 더 이상 신경 쓰고 싶지 않다면 그냥 가져가세요.
"두 경우 모두"는 다음과 같은 의미를 갖습니다. 속성에 액세스하기 위해 사용자 모델이 필요할 뿐만 아니라 ForeignKey/ManyToMany 관계를 정의하려는 경우에도 마찬가지입니다.
변경 로그에서:
get_user_model()은 이제 모델을 정의하는 모듈에서도 가져올 때 호출할 수 있습니다.
그래서... 아직도 사용할 이유가 있나요?settings.AUTH_USER_MODEL
음, 의사들은 여전히 그들에게settings.AUTH_USER_MODEL
(이것은 문자열) 관계를 정의하지만 명확한 이유는 제공하지 않습니다.성능에는 도움이 될 수 있지만 크게 문제가 되지는 않는 것 같습니다.
코드 예:
from django.db import models
from django.contrib.auth import get_user_model
...
...
user = models.ForeignKey(
get_user_model(),
null=True, # explicitly set null, since it's required in django 2.x. - otherwise migrations will be incompatible later!
...
)
장고 1.11 이후로,get_user_model()
실제로 사용하는settings.AUTH_USER_MODEL
:
def get_user_model():
"""
Return the User model that is active in this project.
"""
try:
return django_apps.get_model(settings.AUTH_USER_MODEL, require_ready=False)
except ValueError:
raise ImproperlyConfigured("AUTH_USER_MODEL must be of the form 'app_label.model_name'")
except LookupError:
raise ImproperlyConfigured(
"AUTH_USER_MODEL refers to model '%s' that has not been installed" % settings.AUTH_USER_MODEL
)
settings.AUTH_USER_MODEL
예를 들어 문자열(사용자 모델의 위치)을 반환합니다.user_accounts.User
.
get_user_model()
문자열이 아닌 실제 모델 클래스를 반환합니다.
따라서 사용자 모델이 필요한 경우에는get_user_model()
필요한 곳은 위치)module.model
를로사용, 문자를 합니다.settings.AUTH_USER_MODEL
.
get_user_model()을 사용하여 "장고 3.x의 두 스쿠프"라는 책에서 읽었듯이:
이는 가져오기 루프를 생성하는 경향이 있기 때문에 좋지 않습니다.
잘못된 예: 소유자 = 모델.OneToOneField(get_user_model()) -> BAD Don't IT
AUTH_USER_MODEL이 설정되지 않은 경우 기본 사용자 모델로 폴백하는 방법:
from django.conf import settings
from django.contrib.auth.models import User
USER_MODEL = getattr(settings, 'AUTH_USER_MODEL', User)
언급URL : https://stackoverflow.com/questions/24629705/django-using-get-user-model-vs-settings-auth-user-model
'bestsource' 카테고리의 다른 글
마지막 Git 커밋을 준비되지 않은 영역으로 이동(또는 "실행 취소") (0) | 2023.07.18 |
---|---|
셸 명령을 직접 실행하는 대신 파이썬의 OS 모듈 방식을 사용하는 이유는 무엇입니까? (0) | 2023.07.18 |
카프카와 마리애드브 통합을 위한 하나의 샘플 프로젝트 링크를 공유하는 사람이 있습니까? (0) | 2023.07.18 |
SQL Server 데이터베이스 이름에 사용할 수 있는 문자는 무엇입니까? (0) | 2023.07.18 |
Python을 사용하여 시스템의 외부 IP 주소 가져오기 (0) | 2023.07.18 |