Python 自定义权限未传递到通用视图django rest

Python 自定义权限未传递到通用视图django rest,python,django,django-rest-framework,Python,Django,Django Rest Framework,我正在编写自定义权限并在泛型视图中继承,但它不起作用,它将返回 TypeError:无法将AnonymousUser强制转换为int。是否尝试使用它代替User 而不是执行此操作所需的用户 我的定制许可如下 class IsOwnedByUser(permissions.BasePermission): def has_object_permission(self, request, view, obj): message = {'detail': 'User requi

我正在编写自定义权限并在泛型视图中继承,但它不起作用,它将返回

TypeError:无法将AnonymousUser强制转换为int。是否尝试使用它代替User

而不是执行此操作所需的
用户

我的定制许可如下

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
视图.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)
顺便说一句,当我像这样使用rest框架时,它可以与默认的rest框架权限类配合使用

permission\u class=(permissions.IsAuthenticated,)


但在我的自定义权限下,它不起作用(有人能告诉我为什么会这样吗?提前谢谢!

事实上,正如Pavan Kumar告诉你的那样,你应该同时使用这两个(permissions.IsAuthenticated,IsOwnedByUser) 但如果只想使用一个权限,可以创建自己的权限:

类IsAuthenticatedAndOwner(permissions.BasePermission):
消息='执行此操作所需的用户'
def具有_权限(自我、请求、查看):
return request.user和request.user.u是否经过身份验证
def具有对象权限(自我、请求、查看、obj):
返回obj.user==request.user

您还可以在settings.py文件中添加默认设置。尝试以下操作(如在文档中一样,根据需要调整权限):


尝试同时添加这两个权限(permissions.IsAuthenticated,IsOwnedByUser,)是的,如果同时添加了这两个权限,则它可以工作。但它应该与其中一个一起工作them@Nerd你说的“应该和他们中的一个合作”是什么意思?您只允许使用一个权限或什么?因为该用户未登录request.user将是匿名的,这会导致您出现此问题,用户必须登录才能访问您的request.usercase@PavanKumarTS哦,我同意你的观点是的,你是对的,谢谢
REST_FRAMEWORK = {
    # Use Django's standard `django.contrib.auth` permissions,
    # or allow read-only access for unauthenticated users.
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.TokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated'
    ]
}