2012-03-14 65 views
7

快速(可能是愚蠢的)問題。這是我的網站的流程:用戶登錄並重定向到自定義管理頁面。在此管理頁面上,他們有能力創建「個人資料」。我想將他們創建的配置文件與其用戶數據相關聯,以使1個用戶與1個配置文件關聯。連接到Django的用戶模型

出於某種原因,下面不工作(無非是想

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

我不斷收到相關聯: 表useradmin_profile沒有名爲usern的列ame_id

任何想法?讚賞。

編輯:

刪除我的數據庫並運行了一個新的執行syncdb,改爲用戶名= models.OneToOneField(用戶)。現在我得到無法分配「u'superuser」「:」Profile.username「必須是」用戶「實例。

回答

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

恩,謝謝。現在我得到了:不能分配「u'John'」:「Profile.username」必須是一個「用戶」實例。 (John是User.username) – user1059105 2012-03-14 21:06:16

+0

編輯代碼...試試。儘管如此,你將不得不做一個新的syncdb。 – Scalamoosh 2012-03-14 21:18:14

+0

嗯。好吧,嘗試一個新的syncdb。當我嘗試訪問print a.first_name其中a = User時,shell將打印出空白。當我嘗試訪問Profile對象並執行Profile.objects.all()時,我得到[]而不是full_name()。有任何想法嗎? – user1059105 2012-03-14 21:32:22

2

您syncdb'ed的剖面模型的你有一個username ForeignKey的前場。 Django只會創建表格,但一旦創建就不會改變它們。這裏列出您的選項的答案: https://stackoverflow.com/a/7693297/990224

你應該考慮將username重命名爲user

+0

刪除數據庫並做一個新的syncdb並沒有解決問題,正如在其他答案中所表達的。 – user1059105 2012-03-15 04:09:20

+0

那麼,你必須決定是否要保存用戶名或用戶。什麼'不能分配'u'superuser'「:」Profile.username「必須是一個」用戶「實例'告訴你,你正在試圖將用戶名保存在Profile.username中。但Profile.username必須是用戶。因此,無論是傳遞用戶還是將OneToOneField更改爲CharField。 – roam 2012-03-15 06:25:10