Django TastyPie Geo距离查询

时间:2012-09-05 10:18:07

标签: django distance tastypie geo

我正在使用TastyPie进行地理距离查找。这有点困难,因为它不受TastyPie的支持。在Github上(https://gist.github.com/1067176)我找到了以下代码示例:

 def apply_sorting(self, objects, options=None):
     if options and "longitude" in options and "latitude" in options:
         return objects.distance(Point(float(options['latitude']), float(options['longitude']))).order_by('distance')

     return super(UserLocationResource, self).apply_sorting(objects, options)

效果很好,但现在我希望将距离作为TastyPie中的字段结果。你知道怎么做吗?只在“字段”属性中包含“距离”不起作用。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

元属性中定义的字段不足以返回其他值。 需要将它们定义为资源中的其他字段:

distance = fields.CharField(attribute="distance", default=0, readonly=True)

可以通过在资源

中定义dehydrate_distance方法来填充此值
def dehydrate_distance(self, bundle):
    # your code here

或者通过在资源元数据库中向查询集添加一些其他元素,如下所示:

queryset = YourModel.objects.extra(select={'distance': 'SELECT foo FROM bar'})

Tastypie本身附加了一个名为resource_uri的字段,该字段实际上并不存在于查询集中,查看tastypie资源的源代码也可能对您有所帮助。