3

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

在此先感谢您的帮助!

4

1 回答 1

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

于 2012-09-05T11:35:50.817 回答