2012-03-14 11 views
7

Pregunta rápida (probablemente insensata). Este es el flujo de mi sitio: el usuario inicia sesión y se lo redirecciona a una página de administración personalizada. En esta página de administración tienen la capacidad de hacer un 'Perfil'. Quiero asociar el perfil que crean con sus datos de usuario de modo que 1 usuario se asocie a 1 perfil.Conéctese al modelo de usuario en Django

Por alguna razón, la siguiente no está funcionando (simplemente tratando de asociar

UserAdmin.Models

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

class Profile(models.Model): 
    username = models.ForeignKey(User) 
    firstname = models.CharField(max_length=200) 
    lastname = models.CharField(max_length=200) 
    email = models.EmailField(max_length=200) 

    def __unicode__(self): 
     return self.username 

UserAdmin.Views

def createprofile(request): 

    user = User.objects.get(id=1) 
    profile = Profile(username=user, firstname='Joe', lastname='Soe', email='[email protected]') 
    profile.save() 

sigo recibiendo: tabla useradmin_profile no tiene columna llamada usern ame_id

¿Alguna idea? Apreciado.

EDIT:

eliminado mi db y se pasó una syncdb fresca, cambió de nombre de usuario = models.OneToOneField (Usuario). Ahora obtengo la cámara No puedo asignar "u'superuser '": "Profile.nombre de usuario" debe ser una instancia de "Usuario".

Respuesta

9

UserAdmin.Models

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

class Profile(models.Model): 
    user = models.OneToOneField(User) 

    def __unicode__(self): 
     return self.user.get_full_name() 

UserAdmin.Views

def createprofile(request): 

    user_ = User.objects.get(pk=1) 
    profile = Profile(user=user_) 
    profile.user.first_name = 'Joe' 
    profile.user.last_name = 'Soe' 
    profile.user.email = '[email protected]' 
    profile.user.save() 
    profile.save() 
+0

Hmm, gracias. Ahora estoy obteniendo: No puedo asignar "u'John '": "Profile.username" debe ser una instancia de "Usuario". (John es User.username) – user1059105

+0

Editado el código ... Pruébalo. Sin embargo, tendrá que hacer un nuevo syncdb. – Scalamoosh

+0

Hmm. Bien, lo intenté con un nuevo syncdb. El shell está imprimiendo un espacio en blanco cuando intento acceder a print a.first_name donde a = User. Cuando intento acceder al objeto Profile y hago Profile.objects.all() obtengo [] impreso en lugar de full_name(). ¿Algunas ideas? – user1059105

2

Usted syncdb'ed el modelo del perfil antes de tener un campo ForeignKey username. Django solo creará tablas, pero no las alterará una vez que se hayan creado. Aquí una respuesta que enumera sus opciones: https://stackoverflow.com/a/7693297/990224.

Y debe pensar en cambiar el nombre username al user.

+0

Eliminar el db y hacer un nuevo syncdb no resolvió el problema, como se expresa en la otra respuesta. – user1059105

+0

Bueno, debe decidir si desea guardar el nombre de usuario o un Usuario. Lo que 'No puede asignar 'u'superuser'": "Perfil.nombre de usuario" debe ser una instancia de "Usuario" le dice que está tratando de guardar el nombre de usuario en Perfil.nombre de usuario. Pero Profile.username debe ser un usuario. Entonces, transfiera el usuario o cambie su OneToOneField a un CharField. – roam

Cuestiones relacionadas