2009-10-29 7 views
7

사용자 지정 관리자를 사용하여 기본 사용자 모델을 확장하는 방법은 무엇입니까?사용자 모델 용 Django 사용자 지정 관리자

내 응용 프로그램에는 내장 된 그룹 모델을 사용하여 정의되는 많은 사용자 유형이 있습니다. 따라서 사용자는 클라이언트, 직원 등이 될 수 있습니다.

User.clients.filter(name='Test') 

Test의 이름을 가진 모든 클라이언트를 얻으려면 다음과 같이하십시오. 사용자 정의 모델을 위해 사용자 정의 관리자를 사용하여이를 수행하는 방법은 알고 있지만, 장황한 소스 코드를 수정하는 것만으로는 충분하지는 않지만 모든 구운 제품을 유지하면서 사용자 모델로 이동하는 방법을 잘 모르겠습니다. 이는 자체 아니오 ....

답변

-1

당신이 수

AUTH_PROFILE_MODULE 대한 사용자 프로파일 = 'accounts.UserProfile'

사용자 프로파일 모델되면 정의에 지정된 이 방법은 각 사용자 개체는 메서드가 있습니다 - get_profile) - 해당 사용자와 연결된 사용자 프로필 모델 인스턴스를 반환합니다.

또는 직접 authenticate backend을 작성할 수 있습니다. 설정에 추가했습니다.

+1

-1 사용자 프로필은 추가 데이터 특성을 추가하는 데 적합하지만이 경우에는 전혀 도움이되지 않습니다. 그리고 마지막 코드 블록을 간단하게 깨뜨린 (테스트 했습니까?) 클래스에 관리자를 추가 할 수 없으므로 add_to_class 메소드를 호출하여 올바르게 설정해야합니다. –

+0

User 대신 프로필 모듈을 사용하는 데 도움이됩니다. UserProfile.user_clients.filter (name = 'Test') 하지만 마지막 블록이 실제로 손상되었습니다. 감사. 나는 내 대답을 편집하고있다. – Oduvan

16

예, 사용자 정의 관리자를 직접 User 클래스에 추가 할 수 있습니다. 이것은 monkeypatching이며 코드 유지 관리가 쉽지 않습니다. 코드를 파악하려고 시도하는 사용자는 User 클래스가 해당 사용자 정의 관리자를 어디서 얻었는지 또는 찾을 수있는 곳을 모를 수 있습니다. 이 경우 상대적으로 무해합니다. 사용자 클래스의 기존 동작을 실제로 오버라이드하지 않고 새로운 것을 추가하기 만하면됩니다.

from django.contrib.auth.models import User 
User.add_to_class('clients', ClientsManager()) 

장고 1.1 이상을 사용하는 경우, 당신은 proxy model와 서브 클래스 사용자도 할 수; 데이터베이스에는 영향을 미치지 않지만 monkeypatch없이 별도의 관리자를 추가 할 수 있습니다.

+0

도움, 감사합니다. –

+2

@JoseJose이 대답을 올바른 것으로 표시하십시오. – sberder

+0

매우 감사합니다. – nemesisdesign

관련 문제