TypeError:必须是实数,而不是str:Django

TypeError:必须是实数,而不是str:Django,django,django-rest-framework,Django,Django Rest Framework,我得到了这个错误:TypeError:必须是实数,而不是str。当我打印请求数据时,lat2,lon2,然后打印浮点数类型。当我运行下面的代码,然后它抛出我的错误,必须是realnumber不是str类型 如果有人能帮我解决这个问题那就太好了。事先非常感谢你 def distance(lon1, lat1, lon2, lat2): lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2]) # H

我得到了这个错误:
TypeError:必须是实数,而不是str
。当我打印请求数据时,
lat2
lon2
,然后打印浮点数类型。当我运行下面的代码,然后它抛出我的错误,必须是realnumber不是str类型
如果有人能帮我解决这个问题那就太好了。事先非常感谢你

def distance(lon1, lat1, lon2, lat2): 

    lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])     
    # Haversine formula  
    dlon = lon2 - lon1  
    dlat = lat2 - lat1 
    a = sin(dlat / 2)**2 + cos(lat1) * cos(lat2) * sin(dlon / 2)**2
  
    c = 2 * asin(sqrt(a))  
    r = 6371 # Radius of earth in kilometers 
    return(c * r) # calculate the result 

如果通过
float
运行它们会发生什么?既然您从request.get获得了lat2,lon2,那么您应该检查格式
'1.43'。替换('.','',1).isdigit()
,或者在它周围放置try,除非您所指的打印发生在哪里?@PaulH问题已经解决。通过转换为
float
值。多谢各位。
class GarageShopDetailAPIView(APIView):
    def get(self,request,*args,**kwargs):
        lat2 = self.request.GET.get('lat2', None)
        lon2 = self.request.GET.get('lon2', None)

        queryset = ShopOwnerShopDetails.objects.filter(id=query_id)
        serializer = ShopOwnerShopDetailsSerializer(queryset, many=True, context={'request':request})
        data = serializer.data
        km_difference = []
        for record in data:
            lon1 = record['lon']
            lat1 = record['lat']
            km_differ = distance(lon1, lat1, lon2 , lat2)
            km_difference.append({"km_difference":km_differ})