如何在Django DRF中的GenericAPIView中正确使用queryset?

时间:2018-04-25 16:02:55

标签: django django-rest-framework

我已经开始使用GenericAPIView而不是APIView,我对使用在类顶部定义的queryset和serializer_class感到困惑。 我知道必须定义这些,但我现在在我的类的顶部和GET内的另一个查询中有一个查询。我的问题是我可以在我的GET方法中使用查询集,所以我没有做出2个不必要的查询。

class demo(GenericAPIView):
    queryset = Demo.objects.all()
    serializer_class = DemoSerializer
    def get(self, request, num, format=None):
        query = Demo.objects.filter(name=test, number=num)

换句话说,queryset = Demo.objects.all()是定义的,因为它是必需的 - 但我并没有真正使用它,所以看起来像是一个额外的查询......

1 个答案:

答案 0 :(得分:1)

仅在您未定义get_queryset方法的情况下才需要

queryset。在您的情况下,而不是在get中定义其他查询集,只需实现get_queryset。如果您使用的是url的kwargs,则可以使用self.kwargs属性在此方法中获取它:

class demo(GenericAPIView):
    serializer_class = DemoSerializer

    def get_queryset(self):
        return Demo.objects.filter(name=test, number=self.kwargs['num'])