2012-03-14 13 views
7

Szybkie (prawdopodobnie głupie) pytanie. To jest przepływ mojej witryny: użytkownik loguje się i jest przekierowywany do niestandardowej strony administratora. Na tej stronie administratora mają możliwość utworzenia "Profilu". Chcę powiązać utworzony profil z danymi użytkownika w taki sposób, aby 1 użytkownik kojarzył się z 1 profilem.Połączyć się z modelem użytkownika w Django

Z jakiegoś powodu nie działa następnym (po prostu stara się skojarzyć

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

wciąż otrzymuję: tabela useradmin_profile nie ma kolumny o nazwie usern ame_id

Jakieś pomysły? Doceniony.

EDIT:

Usunięto moim DB i pobiegł świeżego syncdb, zmieniono nazwę użytkownika (user = models.OneToOneField). Teraz mogę uzyskać Nie można przypisać "u'superuser" ":" Profile.username "musi być instancją" użytkownika ".

Odpowiedz

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, dzięki. Teraz otrzymuję: Nie można przypisać "u'John" ":" Profile.username "musi być instancją" użytkownika ". (John to User.username) – user1059105

+0

Edytował kod ... Spróbuj. Będziesz musiał jednak zrobić świeżą syncdb. – Scalamoosh

+0

Hmm. W porządku spróbował tego ze świeżą syncdb. Powłoka drukuje puste miejsce, gdy próbuję uzyskać dostęp do a.pierwsza nazwa, gdzie a = Użytkownik. Kiedy próbuję uzyskać dostęp do obiektu Profile i zrobić Profile.objects.all(), otrzymam wydrukowaną zamiast full_name(). Jakieś pomysły? – user1059105

2

Ty syncdb'ed modelu Profil zanim miał username ForeignKey pola. Django utworzy tylko tabele, ale nie zmieni ich po utworzeniu. Oto odpowiedź z listą opcji: https://stackoverflow.com/a/7693297/990224.

Powinieneś pomyśleć o zmianie nazwy na username na user.

+0

Usunięcie bazy danych i wykonanie nowego syncdb nie rozwiązało problemu, co zostało wyrażone w drugiej odpowiedzi. – user1059105

+0

Cóż, musisz zdecydować, czy chcesz zapisać nazwę użytkownika, czy użytkownika. Co 'Can not assign" u'superuser '":" Profile.username "musi być instancją" User "" mówi, że próbujesz zapisać nazwę użytkownika w Profile.username. Ale Profile.username musi być użytkownikiem. Więc przepuść użytkownika lub zmień OneToOneField na CharField. – roam

Powiązane problemy