2009-10-29 20 views
7

¿Cómo podría extender el modelo de usuario predeterminado con administradores personalizados?Administradores personalizados de Django para el modelo de usuario

Mi aplicación tiene muchos tipos de usuarios que se definirán utilizando el modelo de Grupos integrado. Entonces, un usuario puede ser un cliente, un miembro del personal, etc. Sería ideal poder hacer algo como:

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

Para obtener todos los clientes con un nombre de Prueba. Sé cómo hacer esto usando gestores personalizados para modelos definidos por el usuario, pero no estoy seguro de cómo hacerlo con el modelo de Usuario mientras sigo guardando todos los objetos horneados, al menos antes de modificar el código fuente de django sí que es un no, no ....

Respuesta

-1

puede perfil de usuario para este

AUTH_PROFILE_MODULE = 'accounts.UserProfile'

Cuando un modelo de perfil de usuario ha sido definido y especificado en De esta manera, cada objeto Usuario tendrá un método - get_profile () - que devuelve la instancia del modelo de perfil de usuario asociado con ese Usuario.

O puede escribir su propio authenticate backend. Se agregó en la configuración

+1

-1 Los perfiles de usuario son buenos para agregar atributos de datos adicionales, pero no ayudan con este caso. Y su último bloque de código simplemente está roto (¿lo has probado?), No puedes agregar un administrador a una clase como esa, tienes que llamar al método add_to_class para que esté configurado correctamente. –

+0

Ayuda, para usar el módulo de perfil en su lugar Usuario. UserProfile.user_clients.filter (name = 'Test') Pero mi bloque final está realmente roto. Gracias. Estoy editando mi respuesta. – Oduvan

16

Sí, puede agregar un administrador personalizado directamente a la clase Usuario. Esto es monopatching, y hace que su código sea menos sostenible (alguien que intenta descifrar su código puede no tener idea de dónde la clase de Usuario adquirió ese administrador personalizado, o dónde podrían buscarlo). En este caso, es relativamente inofensivo, ya que en realidad no anula ningún comportamiento existente de la clase User, simplemente agrega algo nuevo.

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

Si está utilizando Django 1.1+, que también podría subclase usuario con un proxy model; no afecta la base de datos, pero le permite asociar administradores adicionales sin el monopatch.

+0

útil, gracias. –

+2

@JoseJose marque esta respuesta como correcta – sberder

+0

muy positiva, gracias – nemesisdesign

Cuestiones relacionadas