2010-12-30 46 views
10

Estoy intentando que la interfaz de administración de Django muestre información sobre mi perfil. Muestra todos mis usuarios, pero no hay información de perfil. No estoy muy seguro de cómo hacerlo funcionar.Django - Usuario, Perfil de usuario y Administrador

me encontré con este código después de una rápida búsqueda en Google:

from auth.models import UserProfile 
from django.contrib import admin 
from django.contrib.auth.models import User 
from django.contrib.auth.admin import UserAdmin 

admin.site.unregister(User) 

class UserProfileInline(admin.StackedInline): 
    model = UserProfile 

class UserProfileAdmin(UserAdmin): 
    inlines = [UserProfileInline] 

admin.site.register(User, UserProfileAdmin) 

Sin embargo, no creo que haya funcionado. Cuando inicio sesión en la página de administración, veo Usuarios, Grupos y Sitios. Hago clic en Usuarios y veo una lista de todos mis Usuarios, pero no indico ningún perfil. Al hacer clic en un usuario, se muestra información sobre ese usuario, pero todavía no hay información de perfil.

Si se va a ayudar, aquí es mi modelo de declaración:

from django.db import models 
from django.contrib.auth.models import User 

class UserProfile(models.Model): 
    company = models.CharField(max_length=30) 
    user = models.ForeignKey(User, unique=True) 

Y mi código de registro:

def register(request): 
    if request.method == 'POST': 
     uf = UserForm(request.POST) 
     upf = UserProfileForm(request.POST) 
     if uf.is_valid() and upf.is_valid(): 
      user = uf.save() 
      userprofile = upf.save(commit=False)#need to get the user profile object first 
      userprofile.user = user #then set the user to user 
      userprofile.save() #then save to the database 
      return HttpResponseRedirect('/auth/login/') 
    else: 
     uf = UserForm() 
     upf = UserProfileForm() 
    return render_to_response('register.html', dict(userform=uf,userprofileform=upf),context_instance=RequestContext(request)) 
+0

¿Pusiste el código para el administrador en el paquete de una nueva aplicación en 'admin.py' y lo agregaste a' INSTALLED_APPS'? –

+0

El código para el administrador está en admin.py dentro de mi aplicación "auth". auth está en INSTALLED_APPS. También configuro mi Auth Profile Module correctamente. – JPC

+2

auth parece una mala reputación porque puede tener un conflicto. –

Respuesta

25

no puedo ver exactamente lo que está mal, pero aquí hay un ejemplo un poco más simple que Sé que funciona Pon esto es cualquier admin.py operativo. Intente agregar una coma final a su línea, algunas cosas se rompen sin ella.

from django.contrib import admin 
from django.contrib.auth.models import User 
from django.contrib.auth.admin import UserAdmin 
from accounts.models import UserProfile 

admin.site.unregister(User) 

class UserProfileInline(admin.StackedInline): 
    model = UserProfile 

class UserProfileAdmin(UserAdmin): 
    inlines = [ UserProfileInline, ] 

admin.site.register(User, UserProfileAdmin) 
+0

Este es el mismo código, excepto con una coma – JPC

+1

@JPC Lo que no debería importar, lo sé. ¿Estás seguro de que tu admin.py será recogido? –

+0

Creo que funcionó. ¡Puedo ver el perfil ahora cuando hago clic en un usuario! Wow gracias. Una coma – JPC

6

Esto no es exactamente una respuesta a su pregunta, pero, de acuerdo con Django Admin documentation, se puede visualizar la información de PerfilUsuario en su "mesa" del usuario. Y puedes hacer que se pueda buscar.

Eso sería algo como esto (respuesta modificación de C. Alan Zoppa):

class UserProfileAdmin(UserAdmin): 
    inlines = [ UserProfileInline, ] 
    def company(self, obj): 
     try: 
      return obj.get_profile().company 
     except UserProfile.DoesNotExist: 
      return '' 
    list_display = UserAdmin.list_display + ('company',) 
    search_fields = UserAdmin.search_fields + ('userprofile__company',) 

Es posible que tenga un problema, aunque con la búsqueda si la clase de perfil ya no se llama UserProfile.

3

La coma que falta no debería importar. Sospecho que el problema es que agregó un nuevo admin.py pero el servidor de desarrollo no lo reconoció. Si reinicia el servidor de desarrollo, verá el nuevo archivo.

+0

esta es la respuesta correcta – mgalgs

Cuestiones relacionadas