【发布时间】:2020-01-27 06:53:00
【问题描述】:
我正在编写自定义权限并在通用视图中继承,但它不起作用它返回
TypeError:无法将 AnonymousUser 转换为 int。您是否尝试使用它来代替 User?
而不是User required to perform this action
我的自定义权限如下
class IsOwnedByUser(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
message = {'detail': 'User required to perform this action'}
return obj.user == request.user
views.py
class OrderAddressView(generics.ListCreateAPIView):
queryset = OrderAddress.objects.all()
serializer_class = OrderAddressSerializer
permission_classes = (IsOwnedByUser,)
def perform_create(self, serializer):
serializer.save(user=self.request.user)
def get_queryset(self):
return OrderAddress.objects.filter(user=self.request.user)
顺便说一句,当我像这样使用默认休息框架权限类时,它可以正常工作
permission_class = (permissions.IsAuthenticated,)
但是在我的自定义权限下它不起作用(谁能告诉它为什么会这样?提前谢谢!
【问题讨论】:
-
尝试同时添加(permissions.IsAuthenticated,IsOwnedByUser,)
-
是的,如果两者都添加,它可以工作。但它应该适用于其中之一
-
@Nerd 你所说的“它应该与其中之一一起工作”是什么意思?你只允许使用一个权限还是什么?
-
由于用户未登录 request.user 将是匿名的,这会导致您的问题用户必须登录才能访问 request.user 在您的情况下
-
@PavanKumarTS 哦,我明白你的意思是的,你是对的,谢谢
标签: python django django-rest-framework