Get_queryset() 缺少 1 个必需的位置参数:'request' 当我尝试按登录用户过滤对象时

Get_queryset() missing 1 required positional argument: 'request' when i'm trying to filter objects by logged in user

我正在尝试使用 django rest 框架在“设施列表页面”上列出用户拥有的所有设施并做出反应。我尝试了以下方法来实现这一点(admin_uid 是拥有该设施的用户的一对一字段):

class FacilityListView(ListAPIView):
    permission_classes = [AllowAny]
    serializer_class = FacilitySerializer
    

    def get_queryset(self, request):
        return Facility.objects.filter(admin_uid=self.request.user)

我收到这个错误:

姜戈 |查询集 = self.filter_queryset(self.get_queryset()) 姜戈 |类型错误:get_queryset() 缺少 1 个必需的位置参数:'request'

这是我之前的工作,但列出了所有设施:

class FacilityListView(ListAPIView):
    permission_classes = [AllowAny]
    serializer_class = FacilitySerializer

    def get_queryset(self):
        return Facility.objects.all()

你可以做到

class FacilityListView(ListAPIView):
permission_classes = [IsAuthenticated]
serializer_class = FacilitySerializer


def get_queryset(self, request):
    admin_uid = self.request.user.id
    return Facility.objects.filter(admin_uid=admin_uid)

你必须做两件事:

首先 - get_queryset 函数只接受一个参数,self,因此从 fn 定义中删除 request

其次 - 要获取登录用户详细信息,请添加 permission_class = [isAuthenticated]

对于未登录的用户,您可以创建具有权限的不同视图 class = allowany,因为您的过滤器对未经过身份验证的用户不起作用。