django 1.3 UserProfile匹配查询不存在

时间:2011-03-29 19:37:23

标签: python django authentication

我对User模型有一个小问题,模型如下所示:

#! -*- 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:UserProfile匹配查询不存在。

这个想法很简单,首先我创建一个用户,它有效,然后我想向用户添加一些信息,它不起作用:/

2 个答案:

答案 0 :(得分:7)

您确定该用户的UserProfile对象存在吗? 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()

答案 1 :(得分:3)

As discussed in the documentation,Django不会自动为您创建配置文件对象。这是你的责任。一种常见的方法是将保存后信号处理程序附加到用户模型,然后在创建新用户时创建配置文件。