首页 > 解决方案 > 在这种情况下,我怎样才能带上 user=pk ?我想根据用户的位置列出

问题描述

我想将 user=pk 放在已注释的第 3 行中。将类从 ListAPIview 更改为 APIview 没有问题。在这种情况下如何实现 pk ?我尝试编写 def get 但无法调用 customer.location。

class ServiceProviderList(generics.ListAPIView):
    # customer = CustomerProfile.objects.get(user=3)
    # queryset = ProfileCompletion.objects.filter(location__distance_lte=(customer.location,25))#all().order_by('-id')
    queryset = ProfileCompletion.objects.all()
    serializer_class=ProfilecompletioneSerializer
    filterset_class=SnippetFilter
    filter_backends = [DjangoFilterBackend,SearchFilter,OrderingFilter]
    filterset_fields = ['fullname', 'category','departments','services']
    search_fields = ['fullname', 'category__name','departments__dept_name','services__service_name']
    

标签: django-rest-framework

解决方案


您覆盖该get_queryset方法:

class ServiceProviderList(generics.ListAPIView):
    queryset = ProfileCompletion.objects.all()
    serializer_class=ProfilecompletioneSerializer
    filterset_class=SnippetFilter
    filter_backends = [DjangoFilterBackend,SearchFilter,OrderingFilter]
    filterset_fields = ['fullname', 'category','departments','services']
    search_fields = ['fullname', 'category__name','departments__dept_name','services__service_name']

    def get_queryset(self, *args, **kwargs):
        customer = CustomerProfile.objects.get(user=self.request.user)
        qs = super().get_queryset(*args, **kwargs):
        return qs.filter(
            location__distance_lte=(customer.location,25)
        ).order_by('-id')

推荐阅读