Django自定义用户登录,具有不同类型的用户

时间:2016-08-02 08:06:11

标签: django

我有一个扩展用户模型,它有三个布尔变量,表明用户是什么类型:

class MyUser(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    newField = models.CharField(max_length=30)
    isTypeA = models.BooleanField(default=False)
    isTypeB = models.BooleanField(default=False)

我也在为基于类的视图编写测试,名为typeCheck

from django.shortcuts import render
from django.contrib.auth.models import User
from .models import MyUser
from django.contrib.auth.decorators import user_passes_test

def typeCheck(User):
    return User.isTypeA

@user_passes_view(typeCheck, login_url='/login')
def typeAView(request):
    ...

当我尝试访问该视图时,我收到一条错误消息:'User'对象没有属性'isA'。如何正确访问扩展用户模型的字段?我也试过

return User.MyUser.isTypeA

但这只会返回一个错误说:'用户'对象没有属性'MyUser'

2 个答案:

答案 0 :(得分:1)

您的typeCheck需要userreturn user.myuser.isTypeA

答案 1 :(得分:0)

您通过使用与您尝试导入的类相同的方法参数来混淆Python,您可以通过将方法参数更改为小写来解决此问题,该参数也遵循pep8命名约定< / p>

def typeCheck(user):
    return user.myuser.isTypeA