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 のフィールド結果として距離を取得したいと考えています。それを行う方法はありますか?fields 属性に「距離」を含めるだけでは機能しません。

よろしくお願いします。

4

1 に答える 1

4

メタ属性で定義されたフィールドは、追加の値を返すには十分ではありません。リソースの追加フィールドとして定義する必要があります。

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

dehydrate_distanceこの値は、リソース内でメソッドを定義することで満たすことができます

def dehydrate_distance(self, bundle):
    # your code here

または、次のようにリソース メタの queryset にいくつかの追加要素を追加します。

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

Tastypie 自体は、クエリセットに実際には存在しない resource_uri というフィールドを追加します。tastypie のリソースのソース コードを確認すると、参考になるかもしれません。

于 2012-09-05T11:35:50.817 に答える