Django返回“配置文件匹配查询不存在”

时间:2012-05-31 08:14:38

标签: python django django-models

我有一些问题。 我导入django用户模型,创建新用户然后尝试获取它的配置文件,我所拥有的是“配置文件匹配查询不存在”。为什么?我只是创建用户。

这是我的代码:

from django.contrib.auth.models import User 
user = User.objects.create(username="stackoverflow", password="tester1234")
user.get_profile()

4 个答案:

答案 0 :(得分:2)

您可能忘记设置

AUTH_PROFILE_MODULE

settings.py

答案 1 :(得分:1)

The online documentation表示get_profile()...

  

返回此用户的特定于站点的配置文件。如果当前站点不允许配置文件,则引发django.contrib.auth.models.SiteProfileNotAvailable;如果用户没有配置文件,则引发django.core.exceptions.ObjectDoesNotExist。有关如何定义特定于站点的用户配置文件的信息,请参阅下面有关存储其他用户信息的部分。

您确定已启用个人资料吗?

从您的代码段看起来您可能没有创建一个单独的类的配置文件(请参阅here

答案 2 :(得分:1)

还要在signal.py中写保存方法:

@receiver(post_save,sender=User)
def save_profile(sender,instance,**kwargs):
    instance.profile.save()

并将其添加到app.py

class UserProfileConfig(AppConfig):
    name = 'UserProfile'

    def ready(self):
        import UserProfile.signals

答案 3 :(得分:0)

Django docs清楚地定义了这个,我很想念,抱歉

  

存储有关用户的其他信息

     

如果您想存储与您的用户相关的其他信息,   Django提供了一种指定特定于站点的相关模型的方法 -   为此目的称为“用户档案”。

     

要使用此功能,请定义包含字段的模型   您想要存储的其他信息或其他方法   您希望可用,还可以添加OneToOneField命名用户   从您的模型到用户模型。这将只确保一个实例   您可以为每个用户创建模型。例如:

from django.contrib.auth.models import User

class UserProfile(models.Model):
    # This field is required.
    user = models.OneToOneField(User)

    # Other fields here
    accepted_eula = models.BooleanField()
    favorite_animal = models.CharField(max_length=20, default="Dragons.")
     

表示此模型是给定的用户配置文件模型   站点,用一个字符串组成的设置AUTH_PROFILE_MODULE   以下项目,用点分隔:

     

定义用户配置文件模型的应用程序名称(区分大小写)(换句话说,传递给的用户配置文件名称)   manage.py startapp来创建应用程序)。   模型的名称(不区分大小写)类。

     

例如,如果配置文件模型是名为UserProfile的类   在名为accounts的应用程序中定义了相应的   设置将是:

AUTH_PROFILE_MODULE = 'accounts.UserProfile'
     

在此中定义并指定用户配置文件模型时   方式,每个User对象都有一个方法 - get_profile() - 其中   返回与之关联的用户配置文件模型的实例   用户。

     

方法get_profile()如果没有,则不会创建配置文件   存在。您需要为User模型注册一个处理程序   django.db.models.signals.post_save信号和,在处理程序中,如果   created为True,创建关联的用户配置文件:

     models.py 中的

     

来自django.contrib.auth.models从中导入用户   django.db.models.signals导入post_save

# definition of UserProfile from above
# ...

def create_user_profile(sender, instance, created, **kwargs):
    if created:
        UserProfile.objects.create(user=instance)

post_save.connect(create_user_profile, sender=User)