2011-03-29 108 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模型,然后在创建新用户时创建配置文件。

相关问题