Django"经理无法通过UserProfile实例访问"

时间:2017-07-11 20:32:26

标签: python django

这是我的views.py

if request.user.is_authenticated():
                changepass = request.user.userprofile.objects.get(user=request.user)
                if changepass.force_password_change == True:
                    changepass.force_password_change = False
                    changepass.save()
                    return HttpResponseRedirect('/login/register/')
                elif changepass.force_password_change == False:
                    return HttpResponseRedirect('/main/')

根据Django,这一行changepass = request.user.userprofile.objects.get(user=request.user)是问题所在。我正在尝试从UserProfile访问force_password_change。 正如标题所示,我收到错误Manager isn't accessible via UserProfile instances

这是我的models.py供参考。

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    force_password_change = models.BooleanField(default=True)

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

    post_save.connect(create_user_profile, sender=User)

3 个答案:

答案 0 :(得分:2)

完成request.user.userprofile

后,您已拥有UserProfile实例

此时,您有一个UserProfile实例。你不能使用对象管理器(.objects)。

你只需要

changepass = request.user.userprofile

获取 userprofile对象的另一种方法是执行

UserProfile.objects.get(user=request.user)

答案 1 :(得分:2)

您无法通过Model实例访问Manager。在您的情况下,request.userUser类的实例。

要访问管理员,您需要直接使用UserProfile课程。

尽管如此,对于您要完成的任务,通过请求的用户对象来扩展数据库要容易得多:

changepass = request.user.userprofile

答案 2 :(得分:1)

尝试使用

order by date, rn