2017-04-15 14 views
1

GeoDjangoの同じモデル上の2つのフィールド間の距離を計算したいとします。GeoDjangoの同じモデルのフィールド間の距離を計算する

posts = Post.objects.filter(location__distance_lte=(ref_location,D(km=F('i_move')) 

場所はPointFieldで、i_moveがfloatである:ここで私はそれをやろうとしている方法です。しかし、これは、Djangoの投げで、動作しません:

フロート()の引数は

ない「F」、文字列または数値でなければなりません私も大で第一の距離を取得しようとしました番号、注釈、およびそれ以降は、フィールドとの距離を比較します。

これは単に機能しません、エラーはスローされません。

似たようなことをしている人は見つかりませんでしたが、問題は最近ではないと思います。

答えて

0

Fフィールドのルックアップを使って伝統的なやり方をすることはできないようです。場所はPointField、およびi_moveあり、

posts = Post.objects.filter(....).extra(
    where=['ST_Distance_Sphere(location::geometry, ST_GeomFromText(%s)) <= i_move*1000'], 
    params=[ref_location.wkt]) 

ref_locationはジャンゴポイント(で):私は余分なクエリパラメータを使用して終了し、実際にそれがメートル単位で距離を返すように非常に良いですpostgresののSt_Distance_Sphere機能、フロートです。 Django Pointsには、wkt表現があります。しかし、ST_Distance_Sphereがジオメトリ・オブジェクトを取得するとき、場所はpostgresキャスト "::"を使用して変換され、ref_locationはST_GeomFromText関数を使用して変換されます。

関連する問題