首页 > 解决方案 > 如何在 django rest 框架中打印计算结果

问题描述

所以在我的项目中,我正在计算 1 个用户和用户列表之间的距离,但由于某种原因,它没有打印,也没有显示下面的计算结果是我的 api 视图

class Listsellers(generics.ListAPIView):
    authentication_classes = [SessionAuthentication, BasicAuthentication]
    queryset = Seller_account.objects.all()
    serializer_class = SellerAccountSerializer
    filter_backends = [DjangoFilterBackend]
    def calc_distance(self, lat_a, long_a, lat_b, long_b):
        EARTH_RADIUS_IN_MILES = 3958.761
        """all angles in degrees, result in miles"""
        lat_ab = radians(lat_a)
        lat_b = radians(lat_b)
        delta_long = radians(long_a - long_b)
        cos_x = (
               sin(lat_ab) * sin(lat_b) +
               cos(lat_ab) * cos(lat_b) * cos(delta_long)
            )
        return acos(cos_x) * EARTH_RADIUS_IN_MILES
    def calc_dist(self):
        user_long = self.request.Users.objects.username.longitude
        user_lat = self.request.Users.objects.username.latitude
        seller_lat = Seller_account.objects.latitude
        seller_long = Seller_account.objects.latitude
        lat_a = user_lat
        print(lat_a)
        long_a = user_long
        print(long_a)
        lat_b = seller_lat
        print(lat_b)
        long_b = seller_long
        print(long_b)
        distance = Users.objects.calc_distance(self, lat_a, long_a, lat_b, long_b)
        print(distance) 

有什么我想念的吗?

标签: pythondjangodjango-rest-framework

解决方案


您可以将 get_queryset() 添加到您的 api 视图中。

class Listsellers(generics.ListAPIView):
    authentication_classes = [SessionAuthentication, BasicAuthentication]
    # queryset = Seller_account.objects.all()
    serializer_class = SellerAccountSerializer
    filter_backends = [DjangoFilterBackend]
    def calc_distance(self, lat_a, long_a, lat_b, long_b):
        EARTH_RADIUS_IN_MILES = 3958.761
        """all angles in degrees, result in miles"""
        lat_ab = radians(lat_a)
        lat_b = radians(lat_b)
        delta_long = radians(long_a - long_b)
        cos_x = (
               sin(lat_ab) * sin(lat_b) +
               cos(lat_ab) * cos(lat_b) * cos(delta_long)
            )
        return acos(cos_x) * EARTH_RADIUS_IN_MILES
    def calc_dist(self):
        user_long = self.request.Users.objects.username.longitude
        user_lat = self.request.Users.objects.username.latitude
        seller_lat = Seller_account.objects.latitude
        seller_long = Seller_account.objects.latitude
        lat_a = user_lat
        print(lat_a)
        long_a = user_long
        print(long_a)
        lat_b = seller_lat
        print(lat_b)
        long_b = seller_long
        print(long_b)
        distance = Users.objects.calc_distance(self, lat_a, long_a, lat_b, long_b)
        print(distance) 
    
    def get_queryset(self):
        queryset = Seller_account.objects.all()
        self.calc_dist()
        return queryset

推荐阅读