2011-03-29 71 views
5

我有一個小問題,用戶模式,這個模式是這樣的:的Django 1.3用戶配置匹配查詢不存在

#! -*- coding: utf-8 -*- 

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

class UserProfile(models.Model): 
     url = models.URLField(max_length = 70, blank = True, verbose_name = 'WWW') 
     home_address = models.TextField(blank = True, verbose_name = 'Home Adress') 
     user = models.ForeignKey(User, blank = True, unique = True) 

     def __unicode__(self): 
      return '%s' %(self.user) 

當我打開一個Django殼和第一進口用戶:

u = User.objects.get(id = 1) 

然後:

zm = UserProfile.objects.get(user = u) 

我得到一個錯誤:

DoesNotExist:UserProfile匹配查詢不存在。

的想法很簡單,首先我創建了一個用戶,它的工作原理,然後我想一些信息添加到用戶,它不到風度工作:/

回答

7

你確定用戶配置對象爲用戶存在? Django不會爲你自動創建它。

你可能想要的是這樣的:

u = User.objects.get(id=1) 
zm, created = UserProfile.objects.get_or_create(user = u) 

如果你確定的配置文件存在(和你正確設置AUTH_PROFILE_MODULE),用戶模型已經有一個輔助方法來處理這個問題:

u = User.objects.get(id=1) 
zm = u.get_profile() 
+0

確實,我經過幾個小時的編碼,並且看到了許多方面:正確的一個總是如此簡單。最好的祝福 – nykon 2011-03-29 19:56:50

3

As discussed in the documentation,Django不會自動爲您創建配置文件對象。這是你的責任。一個常見的方法是將保存後的信號處理程序附加到User模型,然後在創建新用戶時創建配置文件。