django 1.3 用户资料匹配查询不存在

5 投票
2 回答
10680 浏览
提问于 2025-04-16 14:40

我在用户模型上遇到了一个小问题,这个模型长这样:

#! -*- 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()

撰写回答