【问题标题】:django 1.3 UserProfile matching query does not existdjango 1.3 UserProfile 匹配查询不存在
【发布时间】:2011-03-29 19:37:23
【问题描述】:

我有一个用户模型的小问题,模型看起来像这样:

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

思路很简单,首先我创建一个用户,它可以工作,然后我想给用户添加一些信息,它不工作:/

【问题讨论】:

    标签: python django authentication


    【解决方案1】:

    您确定该用户的 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()
    

    【讨论】:

    • 是的,我经过几个小时的编码,我已经查看了很多方面:p ...正确的总是那么简单。最好的问候
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-01-25
      • 1970-01-01
      • 2015-01-28
      • 2022-01-05
      • 2020-10-15
      • 2016-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多