我需要检查表示角色权限的charfield choice实例,但是我无法获得该实例
下面是models.py:
class User(AbstractUser):
ROLE_CHOICES = (
('ADMIN', 'admin'),
('USER', 'user'),
('MODERATOR', 'moderator'),
)
role = models.CharField(choices=ROLE_CHOICES, default=ROLE_CHOICES[1], max_length=500)
bio = models.CharField(max_length=500, blank=True, null=True)
password = models.CharField(max_length=128, blank=True, null=True)
username = models.CharField(max_length=50, blank=True, null=True, unique=True)
email = models.EmailField(unique=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['role']查看权限函数:
def get_permissions(self):
print(self.request.user.role)
print(self.request.user.role)
print(self.request.user.role)
print(self.request.user.role)
print('vvvvvvvvvvvvvvvvvk')
if self.request.user.role == 'user':
print(self.request.user.role)
if self.request.user.role == 'USER':
print(self.request.user.role)
if self.request.user.role == ('USER', 'user'):
print(self.request.user.role)
if self.request.user.role in ['USER', 'user']:
print(self.request.user.role)
print('aaaaaaaaaaaaaa')
if self.action == 'create' or self.action == 'perform_create':
permission_classes = []
elif self.action == 'list' or self.action == 'retrieve':
permission_classes = [permissions.IsAuthenticated]
# elif self.action == 'list':
# permission_classes = [IsAboveUser]
elif self.action == 'destroy' or self.action == 'update' or self.action == 'partial_update':
permission_classes = [permissions.IsAuthenticated]
else:
permission_classes = [IsAdmin]
return [permission() for permission in permission_classes]输出:
('USER', 'user')
('USER', 'user')
('USER', 'user')
('USER', 'user')
vvvvvvvvvvvvvvvvvk所以没什么能通过检查
发布于 2021-02-12 04:08:30
您的default=ROLE_CHOICES[1]应该是default=ROLE_CHOICES[1][0],以不给出默认值的元组,而是给出值'user'。
也可以看看Django 3.1以来的新enumeration types,它使得这类错误更难犯。
https://stackoverflow.com/questions/66161157
复制相似问题