我正在尝试使用与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错误,因此它必须在视图中(我认为)。我想我缺少一条将已登录用户设置为用户实例的行,因此我们可以检查该用户是否具有权限。我知道有很多方法可以做到这一点,并且可能有更好的方法,但是为了学习,我不知道该怎么做?
谢谢 斯科特
答案 0 :(得分:2)
您要检查特定个人资料的访问权限,而不是UserProfile
模型时,需要执行以下操作:
if request.user.userprofile.NewProxAccess:
# your code
请注意:根据PEP8最佳实践,您应仅将camelCase用于命名类。对于attrs,函数使用下划线:my_function