Объект 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/