Объект Django User не имеет атрибута user

Я пытаюсь создать несколько пользовательских классов аутентификации, чтобы проверить, является ли запрашиваемый пользователь частью определенных групп или нет. Однако я получаю ошибку AttributeError: 'User' object has no attribute 'user' appear and I don't know how to resolve it.

Вот файл, который я создал для моих пользовательских классов аутентификации:

from rest_framework import permissions

class IsManager(permissions.BasePermission):
    def has_permission(self, request, view):
        if request.user.user.group.filter(name='managers').exists():
            return True
        else:
            return False

class IsDeliveryCrew(permissions.BasePermission):
    def has_permission(self, request, view):
        if request.user.user.group.filter(name='delivery crew').exists():
            return True
        else:
            return False

Это я Просмотр файла:

from rest_framework import generics, status
from rest_framework.permissions import IsAuthenticated, IsAdminUser
from rest_framework.response import Response
from rest_framework.throttling import AnonRateThrottle, UserRateThrottle
from django.shortcuts import get_object_or_404
from django.http import HttpResponseBadRequest
from django.contrib.auth.models import Group, User
from .models import Category, MenuItem, Cart, Order, OrderItem
from .serializers import CategorySerialzier,MenuItemSerialzier,CartHelpSerializer, CartAddSerialzier,CartRemoveSerializer, CartSerialzier, ManagerListSerializer,OrderSerialzier,OrderItemSerializer,OrderAddSerializer, OrderItemHelperSerialzier
from .permissions import IsManager, IsDeliveryCrew
from datetime import date
import math

class CategoriesView(generics.ListCreateAPIView):
    throttle_classes=[UserRateThrottle,AnonRateThrottle]
    queryset = Category.objects.all()
    serializer_class = CategorySerialzier
    permission_classes= [IsAdminUser]
    

class MenuItemsView(generics.ListCreateAPIView):
    throttle_classes=[UserRateThrottle,AnonRateThrottle]
    queryset = MenuItem.objects.all()
    serializer_class = MenuItemSerialzier
    search_fields = ['title','category__title']
    ordering_fields = ['price','category']
    
    def get_permissions(self):
        permission_classes = []
        if self.request.method != 'GET':
            permission_classes = [IsAuthenticated,IsAdminUser]   
        return [permission() for permission in permission_classes]
   
class SingleMenuItemView(generics.RetrieveUpdateDestroyAPIView):
    throttle_classes=[UserRateThrottle,AnonRateThrottle]
    queryset = MenuItem.objects.all()
    serializer_class = MenuItemSerialzier
    
    '''def get_permissions(self):
        permission_classes = [IsAuthenticated]
        if self.request.method != 'GET':
            permission_classes = [IsAuthenticated, IsManager | IsAdminUser]
        return [permission() for permission in permission_classes]
        '''
    def get_permissions(self):
        permission_classes = [IsAuthenticated]
        if self.request.method == "PATCH":
            permission_classes = [IsAuthenticated, IsManager | IsAdminUser]
        if self.request.method == "DELETE":
            permission_classes = [IsAuthenticated, IsAdminUser]
        return[permission() for permission in permission_classes]

Наконец, вот трассировка моей ошибки:

Я пытался искать на других форумах, но все, что я пробовал там, тоже не помогло.

Одна вещь, которую я сделал, это попытался установить класс аутентификации для этого конкретного метода в файле представления на

Аутентификация по токену путем добавления:

from rest_framework.authentication import TokenAuthentication

затем поместите это в класс:

authentication_classes = (TokenAuthentication,)

Однако теперь это дало мне ошибку "type" object is not iterable, и я решил, что это, похоже, ведет меня дальше по ложному пути.

Я действительно не понимаю, почему это не работает, потому что везде, где я смотрю, каждый всегда делает это с request.user.group..... и не имеет никаких проблем.

попробуйте использовать request.user.groups.filter(), должно сработать. Подробнее читайте здесь https://docs.djangoproject.com/en/5.0/ref/contrib/auth/

Вернуться на верх