我正在使用 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/