Пользовательское разрешение не передается на общие c просмотры django остальные - PullRequest
1 голос
/ 27 января 2020

Я пишу пользовательское разрешение и наследую в обобщенных c представлениях, но он не работает, он возвращает

TypeError: Невозможно привести AnonymousUser к int. Вы пытаетесь использовать его вместо Пользователя?

вместо 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

просмотров. 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,)

, но с моим собственным разрешением не работает (Может кто-нибудь сказать, почему это так? Заранее спасибо!

1 Ответ

2 голосов
/ 27 января 2020

На самом деле, как сказал вам Паван Кумар, вы должны использовать оба (permissions.IsAuthenticated, IsOwnedByUser) Но если вы хотите использовать только одно разрешение, вы можете создать свое собственное:

class IsAuthenticatedAndOwner(permissions.BasePermission):
    message = 'User required to perform this action'

    def has_permission(self, request, view):
        return request.user and request.user.is_authenticated

    def has_object_permission(self, request, view, obj):
        return obj.user == request.user

...