如何在Django REST View的get_queryset方法中传递URL参数?

50pmv0ei  于 2023-05-19  发布在  Go
关注(0)|答案(1)|浏览(207)

我试图在Django中传递一个ID到一个URL来过滤我的结果。为了简单起见,我想列出所有与Bar对象相关的Foo。因为FooBar有外键关系,所以可以过滤。

urlpatterns = [
    path('bar/<int:bar_pk>/foo/', FooListView.as_view()),
]

在我的View中,我将ID作为参数放置到get_queryset()方法中。然而,它没有被传递下来。这个方法不能接受URL参数吗?

class FooListView(ListAPIView):
    serializer_class = FooSerializer
    permission_classes = (permissions.IsAuthenticated,)
    pagination_class = StandardResultsSetPagination
        
    def post(self, request, bar_pk):
        pass

    def get_queryset(self, bar_pk):
        bar = Bar.objects.get(pk=bar_pk)

        foos = Foo.objects.filter(
            bar=bar).order_by('-id')
        return foos

我收到这个错误。

get_queryset() missing 1 required positional argument: 'bar_pk'

如何传递URL参数以获得过滤后的结果?

i7uaboj4

i7uaboj41#

它在self.kwargs中,因此:

class FooListView(ListAPIView):
    serializer_class = FooSerializer
    permission_classes = (permissions.IsAuthenticated,)
    pagination_class = StandardResultsSetPagination
        
    def post(self, request, bar_pk):
        pass

    def get_queryset(self):
        return Foo.objects.filter(bar_id=self.kwargs['bar_pk']).order_by('-id')

相关问题