2009-03-24 16 views

Odpowiedz

7

Z Django 1.1, który jest obecnie w wersji beta, zaimplementowałbym 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 potrzebuje kodu pamięci podręcznej z oryginału i tak dalej. Ale w zasadzie możesz zrobić coś takiego.

W Django 1.0.x można implementować klasy pochodne na podstawie użytkownika, ale może to spowodować złamanie kodu w innych miejscach. Do takich rzeczy uwielbiam klasy proxy, które po prostu dodają funkcje Pythona bez zmiany modeli baz danych.

+0

Te wyglądają na przydatne, ale nadal stanowi to dokładnie ten sam problem, jaki mam z moim własnym wykorzystaniem wielu typów użytkowników/profili: istniejące aplikacje nie wiedzą o tym. Po prostu tworzą instancje użytkowników, więc ta metoda jest całkowicie ignorowana. – ironfroggy

+0

Tak, wiele modeli użytkowników nadal stanowi problem, ale można rozwiązać różne profile na podstawie ról. –

0

Czy masz rad http://docs.djangoproject.com/en/dev/topics/auth/#auth-profiles?

To standardowe rozwiązanie.

+2

Przeczytałem to. Potrzebuję różnych rodzajów profili dla różnych rodzajów użytkowników, to rozwiązanie zapewni tylko jeden rodzaj profilu dla wszystkich użytkowników. –

+0

Zaktualizuj swoje pytanie na przykładzie "różnych rodzajów profili". Zazwyczaj definiujemy profile z wieloma polami, z których niektóre są opcjonalne. O czym mówisz? –

Powiązane problemy