用一对一字段扩展用户模型-如何在视图中设置用户实例

时间:2018-12-13 03:36:24

标签: django

我正在尝试使用与UserProfile模型的一对一关系来扩展用户模型。我添加了一些布尔字段,并在视图中尝试将这些字段用作权限。

这是我的模特:

class UserProfile(models.Model):

    user = models.OneToOneField(User)
    FirstName = models.CharField(max_length=25)
    LastName = models.CharField(max_length=25)
    ProximityAccess = models.BooleanField(default=True)
    NewProxAccess = models.BooleanField(default=False)

    def __unicode__(self):
        return self.user.username

这是我要使用的视图:

@login_required
def NewProx(request):
    if UserProfile.NewProxAccess:
        if request.method == 'POST':
            form = ProxForm(request.POST)
            if form.is_valid():
                ProxPart_instance = form.save(commit=True)
                ProxPart_instance.save()
                return HttpResponseRedirect('/proximity')
        else:
            form = ProxForm()
            return render(request, 'app/NewProx.html', {'form': form})
    else:
        raise PermissionDenied

我没有收到任何错误消息,但无法正常工作。我希望如果用户配置文件将NewProxAccess设置为False,它将引发PermissionDenied,但事实并非如此。我已将管理模块连接好,可以选择或取消选择该字段的复选框,但是它没有任何作用。如果我把其余的注释掉,我可以得到它以显示Permission Denied错误,因此它必须在视图中(我认为)。我想我缺少一条将已登录用户设置为用户实例的行,因此我们可以检查该用户是否具有权限。我知道有很多方法可以做到这一点,并且可能有更好的方法,但是为了学习,我不知道该怎么做?

谢谢 斯科特

1 个答案:

答案 0 :(得分:2)

您要检查特定个人资料的访问权限,而不是UserProfile模型时,需要执行以下操作:

   if request.user.userprofile.NewProxAccess:
        # your code

请注意:根据PEP8最佳实践,您应仅将camelCase用于命名类。对于attrs,函数使用下划线:my_function