【问题标题】:Trying to override a get_queryset in a view试图覆盖视图中的 get_queryset
【发布时间】:2020-10-08 15:03:06
【问题描述】:
class OwnerList(generics.ListAPIView):

      serializer_class = OwnerDetailSerializer
      # queryset = Person.objects.filter(customuser__userrole__role__name='OWNER').distinct()

      permission_classes = [IsAuthenticated]

      filter_backends = [DjangoFilterBackend]

      def get_queryset(self):
           return super(OwnerList, self).get_queryset()

我有这个简单的观点,我试图超越 get_queryset。 问题是,当使用此视图时,我得到:

return super(OwnerList, self).get_queryset()

文件“C:\Users\kdalipaj\PycharmProjects\LTC SYSTEM\venv\lib\site-packages\rest_framework\generics.py”,第 63 行,在 get_queryset 断言 self.queryset 不是 None,(

AssertionError: 'OwnerList' 应该包含queryset 属性,或者覆盖get_queryset() 方法。

为什么会这样?

【问题讨论】:

    标签: python django overriding django-queryset drf-queryset


    【解决方案1】:

    你的代码是:

    return super(OwnerList, self).get_queryset()
    

    意思是:“调用ListAPIView的get_queryset方法。

    ListAPIView 本身没有 get_queryset 方法,但 GenericAPIView(ListAPIView 的父级)有。

    而 GenericAPIView 的 get_queryset 做的很简单:它抛出断言。

    所以,你不应该打电话

    return super(OwnerList, self).get_queryset()
    

    只需创建您自己的查询集并从函数中返回它。例如:

    return Owner.objects
    

    另一种解决方案是在类级别设置queryset 变量:

    class OwnerList(generics.ListAPIView):
        ...
        queryset = Owner.objects
        ...
    
    

    【讨论】:

      猜你喜欢
      • 2020-10-07
      • 1970-01-01
      • 2020-11-08
      • 2020-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 2013-07-16
      相关资源
      最近更新 更多