2010-03-30 4 views
0

나는 UserProfile을 만들고 AUTH_PROFILE_MODULE로 정의하여 django.contrib.auth.models에서 표준 사용자 모델을 사용자 정의한 응용 프로그램을 리팩터링했습니다.사용자 정의 사용자 모델을 사용자 UserProfile에 리 팩터링 : 사용자 정의 UserManager를 작성하거나 user.get_profile()을 수십 번 추가해야합니까?

문제는 UserProfile의 속성이 프로젝트 전체에서 사용자가 보는 것을 결정하는 데 사용된다는 것입니다.

내가 테스트를 작성하고 반복적으로 문이 유형에 넣어했다 :

user = User.objects.get(pk=1) 
user_profile = user.get_profile() 

if user_profile.karma > 10: 
    do_some_stuff() 

이 지루한 내가이 DRY 원칙을 위반하고있어 경우 지금 궁금하네요.

사용자 요청시 UserProfile 데이터를 자동으로로드하는 사용자 정의 UserManager를 만드는 것이 더 합리적일까요?

UserProfile 속성을 반복하여 User 모델에 추가 할 수도 있습니다. 이렇게하면 코드를 낭비하는 사용자 지정 모델 특성에 대한 모든 참조를 업데이트하지 않아도됩니다.

물론 User 및 UserProfile 모델을 올바르게 업데이트 할 수 있도록 처리해야합니다.

장고 - esque 더 접근 방식은?

답변

1

개인적으로 나는 get_profile() 도우미로 고민하지 않습니다. 내 UserProfile에 User에 일대일 필드를 사용하고 related_name='projname_profile'을 설정합니다. (... 난 단지 select_related 이후 장고 1.2에서 반대 1-1 선택 생각하는주의로, 그러나 아마 그것은 백 포트되었습니다)

은 그럼 당신은 하나의 요청에 모든 것을 얻을 수있는 ORM 마법을 사용할 수 있습니다

user = User.objects.select_related().get(pk=1) 
profile = user.projname_profile # or just call it inline