3

次のモデルがあります(簡略化)

from django.contrib.gis.db import models as geomodels

modelB (geomodels.Model):
    objects = geomodels.GeoManager()

modelA (geomodels.Model):
    point   =   geomodels.PointField(unique=True)
    mb      =   models.ForeignKey(modelB,related_name='modela')
    objects =   geomodels.GeoManager()

すべてのモデル B オブジェクトを見つけて、特定の場所からの距離で並べ替えようとしています (距離は、特定の場所と関連するモデル A のポイント オブジェクトの間の距離として定義されます)。クエリを実行しようとすると

modelB.objects.distance((loc, field_name='modela__point')

というエラーが表示されます

TypeError: ST_Distance output only available on GeometryFields. 

loc は Point オブジェクトであることに注意してください。ただし、クエリを実行すると

modelB.objects.filter(modela__point__distance_lte = (loc, 1000)) 

このクエリはエラーなく期待どおりに機能します。

間違いの可能性はありますか?私はdjango 1.2.4、PostGis 1.5.2、PostGres 8.4を使用しています。

ありがとう。

4

1 に答える 1

5

最初のものについては、次のように変更する必要があります。

modelB.objects.all().distance(loc, field_name='modela__point')

すべての modelB オブジェクトを表示する場合。

「.distance」は、距離フィールドを計算し、QuerySet (または GeoQuerySet) の結果の各行に追加するために使用されます。

于 2011-08-25T01:00:26.240 に答える