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-shell并首先导入一个用户时:
u = User.objects.get(id = 1)
然后:
zm = UserProfile.objects.get(user = u)
我遇到了一个错误:
DoesNotExist: 找不到匹配的用户资料。
这个想法很简单,首先我创建一个用户,这个步骤没问题,然后我想给这个用户添加一些信息,但这个步骤就不行了:/
2 个回答
3
根据文档中的说明,Django不会自动为你创建用户的个人资料对象。这是你需要自己来做的。一个常见的方法是给用户模型添加一个“保存后”的信号处理器,这样每当创建一个新用户时,就会自动生成一个个人资料。
9
你确定这个用户的UserProfile对象存在吗?Django不会自动为你创建这个对象。
你可能想要的是这个:
u = User.objects.get(id=1)
zm, created = UserProfile.objects.get_or_create(user = u)
如果你确定这个个人资料是存在的(并且你已经正确设置了AUTH_PROFILE_MODULE),那么User模型已经有一个辅助方法可以处理这个问题:
u = User.objects.get(id=1)
zm = u.get_profile()