首页 > 解决方案 > 无法在 DRF 的 get 函数中返回查询

问题描述

我必须插入距离作为输入参数并处理此代码。但我无法返回查询。当我跑步时,程序要求距离。

{
    "distance": [
        "This field is required."
    ]
}

我的代码如下:

from django.contrib.gis.geos import Point
from django.contrib.gis.measure import D
from Admin_Section.models import Distance

class ServiceProviderList(generics.ListAPIView):
    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): 
        pk=self.kwargs.get('pk')
        qs = CustomerProfile.objects.filter(user=pk)
        if qs.exists():
            customer = qs.first()
        else:
            return qs.none()
    def get(self,request,*args, **kwargs): 
        pk=self.kwargs.get('pk')
        customer = CustomerProfile.objects.get(user=pk)
        serializer = DistanceSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        Dist = serializer.validated_data['distance']
        print(Dist)
        rad=float(Dist)
        radius=rad/111
        print(radius)
        query = ProfileCompletion.objects.filter(location__distance_lte=(customer.location,radius))
        return query

标签: python-3.xdjangodjango-rest-framework

解决方案


GET请求正文中发送有效负载不是一个好主意。你的问题不是很清楚,但是看代码,如果你想使用查询集中的distance数据来过滤,你应该使用查询参数。您可以使用从客户端发送 URL 中的查询参数,some-url?distance=10这些可以在视图中读取,使用request.query_params这将是一个dict查询参数。


推荐阅读