0
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 をオーバーライドしようとしています。問題は、このビューを使用すると次のようになることです。

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 ではないことをアサートします (

querysetAssertionError: 'OwnerList' には、属性を含めるか、get_queryset()メソッドをオーバーライドする必要があります。

なぜこうなった?

4

1 に答える 1

0

あなたのコードは次のとおりです。

return super(OwnerList, self).get_queryset()

つまり、「ListAPIView のメソッド get_queryset を呼び出します。

ListAPIView 自体には get_queryset メソッドはありませんが、ListAPIView の親である GenericAPIView にはあります。

そして GenericAPIView の get_queryset は単純なことを行います: アサーションをスローします。

だから、あなたは電話してはいけません

return super(OwnerList, self).get_queryset()

独自のクエリセットを作成し、関数から返すだけです。例えば:

return Owner.objects

別の解決策はqueryset、クラス レベルで変数を設定することです。

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

于 2020-10-09T00:07:09.843 に答える