2009-03-24 2 views
6

제 신청서에는 학생, 교수 및 직원이 있습니다. 직원은 프로필이 필요 없지만 교수와 학생은 각각 다른 프로필이 필요합니다. 차라리 모든 것을 스스로 구현하지는 않을 것입니다. (미들웨어와 기타 등등) 어쨌든 get_profile()은 사용자의 역할에 따라 다른 프로파일을 반환해야합니까?django에서 여러 종류의 사용자에 대해 서로 다른 프로필을 갖는 가장 좋은 방법은 무엇입니까?

답변

7

현재 베타 버전 인 Django 1.1을 사용하면 proxy model을 구현할 것입니다.

class MyUser(User): 

    class Meta: 
    proxy = True 

    def get_profile(self): 
    if self.role == 'professor': 
     return ProfessorProfile._default_manager.get(user_id__exakt=self.id) 
    elif self.role == 'student': 
     return StudentProfile._default_manager.get(user_id__exakt=self.id) 
    else: 
     # staff 
     return None 

get_profile에는 원본의 캐싱 코드가 필요합니다. 그러나 근본적으로 당신은 그런 것을 할 수 있습니다.

Django 1.0.x에서는 User를 기반으로 파생 클래스를 구현할 수 있지만 다른 곳에서는 코드가 손상 될 수 있습니다. 그런 것들을 위해서 프록시 클래스를 좋아합니다. 프록시 클래스는 데이터베이스 모델을 변경하지 않고 파이썬 기능을 추가합니다.

+0

이것들은 유용하게 보이지만, 여전히 여러 사용자/프로필 유형을 사용하고있는 것과 똑같은 문제가 있습니다. 기존 앱은 그것에 대해 모릅니다. 그들은 단지 사용자 인스턴스를 생성하기 때문에이 멋진 메서드는 완전히 무시됩니다. – ironfroggy

+0

예, 여러 사용자 모델은 여전히 ​​다소 문제가 있지만 역할에 따라 서로 다른 프로필을 해결할 수 있습니다. –

0
+2

나는 그것을 읽었다. 필자가 필요로하는 것은 다양한 종류의 사용자에 대해 서로 다른 종류의 프로필을 제공하는 것으로,이 솔루션은 모든 사용자에게 한 종류의 프로필 만 제공합니다. –

+0

"다른 종류의 프로필"의 예제로 질문을 업데이트하십시오. 일반적으로 여러 필드가있는 프로필을 정의하며 그 중 일부는 선택 사항입니다. 너 무슨 소리 야? –

관련 문제