我正在使用 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 中将距离作为场结果。你知道怎么做吗?仅在字段属性中包含“距离”是行不通的。

在此先感谢您的帮助!

最佳答案

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

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 资源的源代码可能对您也有帮助。

关于Django TastyPie 地理距离查找,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12279221/

10-11 17:43