2012-03-14 12 views
7

Domanda rapida (probabilmente folle). Questo è il flusso del mio sito: l'utente accede e viene reindirizzato a una pagina di amministrazione personalizzata. In questa pagina di amministrazione hanno la possibilità di creare un "profilo". Voglio associare il profilo che creano con i loro dati utente in modo tale che 1 utente si associ a 1 profilo.Connessione a modello utente in Django

Per qualche ragione la seguente non funziona (semplicemente cercando di associare

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() 

continuo a ricevere: table useradmin_profile non ha una colonna denominata usern ame_id

Qualche idea? Apprezzato.

EDIT:

eliminato il mio db e si passò una syncdb fresco, cambiato a username = models.OneToOneField (Utente). Ora ricevo Impossibile assegnare "u'superuser": "Profile.username" deve essere un'istanza "Utente".

risposta

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, grazie. Ora sto ottenendo: impossibile assegnare "u'John" ":" Profile.username "deve essere un'istanza" User ". (John è un utente.nomeutente) – user1059105

+0

Modificato il codice ... Prova. Dovrai fare un nuovo syncdb però. – Scalamoosh

+0

Hmm. Va bene provato con un nuovo syncdb. La shell stampa uno spazio vuoto quando provo ad accedere a print a.first_name dove a = User. Quando provo ad accedere all'oggetto Profile e faccio Profile.objects.all() ottengo [] stampato invece di full_name(). Qualche idea? – user1059105

2

È syncdb'ed il modello profilo prima di avere un campo ForeignKey username. Django creerà solo tabelle ma non le modificherà dopo che sono state create. Ecco una risposta che elenca le tue opzioni: https://stackoverflow.com/a/7693297/990224.

E si dovrebbe pensare di rinominare username a user.

+0

L'eliminazione del db e l'esecuzione di un nuovo syncdb non hanno risolto il problema, come espresso nell'altra risposta. – user1059105

+0

Bene, devi decidere se vuoi salvare il nome utente o un utente. Cosa 'Can not assign" u'superuser ":" Profile.username "deve essere un'istanza" User "dice che stai cercando di salvare il nome utente in Profile.username. Ma Profile.username deve essere un utente. Quindi, passa l'utente o cambia il tuo OneToOneField in un CharField. – roam

Problemi correlati