2010-09-16 20 views
9

Actualmente estoy trabajando en un proyecto django. Estoy intentando agregar un modelo de perfil de usuario en línea a mi modelo de usuario. En mi models.py tengo:Problema con el administrador de Django registrando un perfil de usuario en línea admin

class UserProfile(models.Model): 
    ''' 
    Extension to the User model in django admin. 
    ''' 
    user = models.ForeignKey(User) 
    site_role = models.CharField(max_length=128, choices=SITE_ROLE) 
    signature = models.CharField(max_length=128) 
    position_title = models.CharField(max_length=128) 
    on_duty = models.BooleanField(default=False) 
    on_duty_order = models.IntegerField() 

En mi admin.py tengo:

class UserProfileInline(admin.StackedInline): 
    model = UserProfile 

class UserAdmin(admin.ModelAdmin): 
    inlines = [UserProfileInline] 


admin.site.unregister(User) 
admin.site.register(User, UserAdmin) 

Cuando ejecuto el servidor de desarrollo (sí, he reiniciado) me sale el siguiente excepción:

NotRegistered at /admin 
The model User is not registered 

Esta excepción está viniendo de la línea admin.site.unregister(User).

Sin embargo, cuando comento a cabo esa línea, me sale el siguiente excepción:

AlreadyRegistered at /admin 
The model User is already registered 

Algo sobre mi configuración Django parece ser un poco bipolar. He pasado aproximadamente una hora investigando este problema y el código que tengo parece funcionar muy bien para otros. ¿Alguien tiene alguna idea de por qué esto podría estar pasando?

Gracias, Travis

Respuesta

19

mi suposición es que o bien está haciendo algún módulo de importación loca ... o ... usted tiene un problema de ordenación de la lista de settings.INSTALLED_APPS. Asegúrese de que 'django.contrib.auth' aparezca en su lista antes de que su aplicación reemplace al administrador predeterminado. La lista debe ser algo como esto:

INSTALLED_APPS = (
    # django apps first 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'django.contrib.messages', 
    'django.contrib.admin', 

    # your stuff from here on 
    'yourproject.userstuff', 
) 

aplicación de esa manera Django registra el modelo User, y luego anular el registro y volver a registrar con su propio ModelAdmin.

+0

Mi problema fue el orden de las aplicaciones instaladas. (huele a cabeza) "¡¡¡Duh !!!" Muchas gracias por tu ayuda Federico! – TravFisch

+0

Nunca me enteraría de esto. ¡Django no es muy útil en este caso con la excepción "No registrado"! ¡Gracias! – kissgyorgy

+0

Comentario para salvar vidas muchas gracias – ritmatter

Cuestiones relacionadas