2009-03-24 18 views

Respuesta

7

Con Django 1.1, que actualmente está en versión beta, implementaría un 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 necesita el código de caché del original y así sucesivamente. Pero esencialmente podrías hacer algo como eso.

Con Django 1.0.x podría implementar clases derivadas basadas en el usuario, pero esto podría romper el código en otros lugares. Para cosas así me encantan las clases proxy, que solo agregan la funcionalidad de Python sin cambiar los modelos de la base de datos.

+0

Estos parecen útiles, pero esto todavía plantea exactamente el mismo problema que tengo con mi propio uso de múltiples tipos de usuario/perfil: las aplicaciones existentes no lo conocen. Simplemente crean instancias de usuario, por lo que este buen método se ignora por completo. – ironfroggy

+0

Sí, los modelos de usuarios múltiples todavía son un tanto problemáticos, pero se pueden resolver los diferentes perfiles basados ​​en roles. –

0

¿Tiene usted rad http://docs.djangoproject.com/en/dev/topics/auth/#auth-profiles?

Esa es la solución estándar.

+2

Lo he leído. Lo que necesito es diferentes tipos de perfiles para diferentes tipos de usuarios, esa solución solo dará un tipo de perfil para todos los usuarios. –

+0

Actualice su pregunta con un ejemplo de "diferentes tipos de perfiles". Generalmente, definimos perfiles con múltiples campos, algunos de los cuales son opcionales. ¿De qué estás hablando? –

Cuestiones relacionadas