3

我有一个可以用 alongitudelatitude参数调用的视图。

设置这些参数后,我希望响应在序列化中添加距离字段。

我是这样做的:

def get_queryset(self):
    latitude = self.request.QUERY_PARAMS.get('latitude', None)
    longitude = self.request.QUERY_PARAMS.get('longitude', None)
    if latitude and longitude:
        center = fromstr('POINT(%s %s)'%(latitude,longitude))
        queryset = queryset.distance(center).order_by('distance')
        self.serializer_class.distance = serializers.CharField(source='distance')
        self.serializer_class.Meta.fields += ('distance',)
    return queryset.all()

我想如果不同的话,我可以用两个单独serializer_class的 .

我想知道如果它会更好,你觉得呢?

4

1 回答 1

1

我猜distanceNone在哪里longitudelatitude没有给出?

我倾向于在序列化程序本身上定义距离字段,而不是在视图上动态添加它。

对于距离为的情况None——如果我不想在响应中使用它——我会覆盖to_native序列化程序以将其删除。例如:

def to_native(self, obj):
    ret = super(MySerializer, self).to_native(obj)
    if ret['distance'] is None:         
        del ret['distance']
    return ret

最终结果是相同的,但这种方法更具凝聚力。我希望这会有所帮助。

于 2013-10-03T10:17:46.833 回答