在Django REST中将GeoQuerySet序列化为JSON?

时间:2015-01-08 18:20:40

标签: json django rest geo

我正在尝试使用Django REST Framework将GeoQuerySet序列化为JSON。我是Django的新手,对数据库知之甚少,所以任何帮助都会非常感激。

我一直在努力解决这个问题一整天。

以下是我要做的事情:

class PointView(generics.ListAPIView):
    serializer_class = MyEntityModelSerializer

    def post(self, request, *args, **kwargs):
        """
        Enter description
        here
        """

        entity=EntityType.objects.exclude(point=None)[0]
        lon=request.data['lng']
        lat=request.data['lat']
        radius_km=request.data['radius_km']
        within_radius=entity.is_near(lat,lon,radius_km)

        return within_radius

这是我的错误消息:

AssertionError at /point/

Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from the view, but received a `<class 'django.contrib.gis.db.models.query.GeoQuerySet'>`

1 个答案:

答案 0 :(得分:0)

解决方案!事实证明,POST是为更新数据而设计的,我只是想获取数据。

Django REST框架(DRF)是根据标准构建的,因此我试图强制实施的行为不是框架设计要做的事情。

以下是适合我的解决方案:

class PointView(generics.ListAPIView):
    serializer_class = MyEntityModelSerializer

    def get_queryset(self):
       """
        Enter description
        here
        """

        params = self.request.query_params

        entity=EntityType.objects.exclude(point=None)[0]
        lon=float(params['lng'])
        lat=float(params['lat'])
        radius_km=float(params['radius_km'])
        within_radius=entity.is_near(lat, lon, radius_km)

        return within_radius

感谢irc.freenode.net/django上的bibhas和tbaxter,他指出了我的想法中的错误:GET-Styled POST-Requests是所以不是HTTP / 1.1