2012-03-14 7 views
7

Hızlı (muhtemelen aptalca) soru. Bu, sitemin akışı: Kullanıcı oturum açar ve özel bir yönetici sayfasına yönlendirilir. Bu yönetici sayfasında bir 'Profil' yapma yeteneği vardır. Kullanıcı Profili ile oluşturdukları Profili, 1 Kullanıcı'nın 1 Profille ilişkilendireceği şekilde ilişkilendirmek istiyorum. çalışmıyor aşağıdaki Nedense Django 'ya Kullanıcı Modeline Bağlanın

(basitçe

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 ben almaya devam

def createprofile(request): 

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

ilişkilendirmeye çalıştığınız: table useradmin_profile adlı kullanıcının adında hiç sütun yok

Herhangi bir fikir ame_id? Takdir.

DÜZENLEME:

benim db Silinen ve taze syncdb ran, username = models.OneToOneField (User) olarak değiştirildi. Şimdi ben alırım "u'superuser '" atanamaz: "Profile.username" bir "Kullanıcı" örneği olmalıdır. Bir username ForeignKey alan vardı önce

cevap

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, teşekkürler. Şimdi alıyorum: "u'John '" atanamaz: "Profile.username" bir "Kullanıcı" örneği olmalıdır. (John bir User.username) – user1059105

+0

Kodu düzenledim ... Bunu dene. Yine de yeni bir syncdb yapmalısınız. – Scalamoosh

+0

Hmm. Tamam, yeni bir syncdb ile çalıştı. A.first_name baskıya erişmeye çalıştığımda kabuk bir boş yazdırıyor, burada a = Kullanıcı. Profile nesnesine erişmeye çalıştığımda ve Profile.objects.all() yaptıktan sonra full_name() yerine [] yazdırılıyor. Herhangi bir fikir? – user1059105

2

Sen Profil modeli syncdb'ed. Django sadece tablolar oluşturacak, ancak oluşturulduktan sonra onları değiştirmeyecek. Burada seçeneklerinizi listeleyen bir cevap: https://stackoverflow.com/a/7693297/990224.

Ve user için username yeniden adlandırma düşünmek gerekir.

+0

db'nin silinmesi ve yeni bir syncdb yapılması, diğer cevapta ifade edildiği gibi sorunu çözmedi. – user1059105

+0

Eh, kullanıcı adını veya bir Kullanıcıyı kaydetmek isteyip istemediğinize karar vermelisiniz. Ne 'u'superuser' "atamadı": "Profile.username" bir "Kullanıcı" örneği olmalı, 'size kullanıcı adını Profile.username olarak kaydetmeye çalıştığınızı söyler. Ancak Profile.username bir kullanıcı olmalı. Yani ya kullanıcı üzerinden geçebilir ya da OneToOneField'ınızı bir CharField olarak değiştirin. – roam