3

Stackoverflow の皆さん、こんにちは。

Django の m2m クエリと混同しています。大陸周辺のラジオ局 (単に名前と利用可能な国) をリストするモデル RadioStations があり、次の宣言があります。

class Station(models.Model):
    name = models.CharField(_('Station Name'), max_length=255
    reference = models.URLField(_('Link'), blank=True, verify_exists=True)  
    country = models.ManyToManyField(WorldBorder)

クラス WorldBorder は、こちらの GeoDjango の例に従います。

ここで、米国内のすべての放送局を検索したいと思います。私が使用する場合:

s = Station.objects.filter(country__name__contains = "United States")

私は、米国内のすべてのステーションを取得します。ただし、ユーザーの場所で検索すると、たとえば

pnt = fromstr('POINT(-96.876369 29.905320)', srid=4326)
s = Station.objects.filter(country__mpoly__contains = pnt)

クエリの結果が空です (ポイントが米国にあるとしても、それは m2m クエリの実行方法に関連していますか? クエリの結果が空になるのはなぜですか? m2m 関係に対処する別の方法はありますか?

ご提案ありがとうございます。

4

2 に答える 2

1

質問の解決策は次のとおりです。

Stationsからに行く代わりに、逆に行くWorldBorderことになりました。attribute_set.all()Django では、メソッドを介して逆ルックアップが可能です。

Point解決策は、 withが含まれる国を調べることです。

国 = WorldBorder.objects.get(mpoly__contains = ref_point)

Stations次に、国を含むすべてを検索します

station_list = country.stations_set.all()

set.all()には、フィルター クエリではなく、取得クエリが必要であることに注意してください。set.all() メソッドの詳細については、こちらを参照してください。

于 2012-05-03T14:34:56.873 に答える
1

fromstrgeodjano を試したときに、地理空間クエリを正常に作成できません でした。私の問題を解決するために使用しPointました。

from django.contrib.gis.geos import Point

pnt = Point(-96.876369, 29.905320)

ポイントクラスを使ってみてはいかがでしょうか?

于 2012-04-30T15:58:23.937 に答える