我有一个可以使用longitude
和latitude
参数调用的视图。
设置这些参数后,我希望响应在序列化中添加距离字段。
我是这样做的:
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
。
我想知道它会不会更好,您怎么看?
答案 0 :(得分:1)
我猜distance
是None
,而longitude
和latitude
未被提供?
我倾向于在序列化器本身上定义距离字段,而不是在视图上动态添加它。
对于距离为None
的情况 - 如果我在响应中不想要它 - 我会覆盖序列化程序上的to_native
以将其删除。 E.g:
def to_native(self, obj):
ret = super(MySerializer, self).to_native(obj)
if ret['distance'] is None:
del ret['distance']
return ret
最终结果是相同的,但这种方法更多是内聚。我希望有所帮助。