2012-04-30 13 views
3

こんにちはStackOverflowの人々が含まれている必要があり、ジャンゴ: - 私はジャンゴでのM2Mクエリで混乱していますが、結果に

空間点に基づいてM2Mクエリは、空の辞書を返します。

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例hereを次の:私は大陸の周りのラジオ局が一覧表示されます(単純に名前を付け、使用可能な国)と次の宣言を持っているモデルRadioStationsを持っています。

今、米国のすべての駅を検索したいと思います。 私が使用している場合:

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関係に対処する別の方法?

をご提案いただきありがとうございます!

+0

この問題を解決するには、回答を更新してもらえますか?問題の内容を知りたいと思っていますか?ありがとうございました! – dm03514

+0

こんにちはdm03514、私の答えは答えをご覧ください。ご質問がある場合はお知らせください。解決策は私のためにはうまくいくが、私はまだそれが他の方法ではうまくいかない理由に困惑している。乾杯、neurix – neurix

答えて

1

問題を解決するには、次のされています

代わりWorldBorderStationsから行こうと、私は他の道を行くことになりました。 Djangoでは、attribute_set.all()メソッドを使用して逆引きを許可します。

ソリューションは

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

Pointが含まれている国ルックアップし、その後、国を含むすべてのStationsをルックアップするためにあります

station_list = country.stations_set.all()

set.all()には、フィルタクエリではなく、getクエリが必要であることに注意してください。 set.all()メソッドのバックグラウンドは、hereです。

1

私はgeodjanoをしようとしたときに成功fromstrを使用して、任意の地理空間クエリを作成することができませんでした。私はPointを使用し、私の問題を解決するために。

from django.contrib.gis.geos import Point 

pnt = Point(-96.876369, 29.905320) 

おそらく、あなたはhteポイントクラスを使ってみることができますか?

+0

こんにちはdm03514、あなたの答えに感謝します。興味深いことに、 's = WorldBorder.objects.filter(mpoly__contains = pnt)'は私に正しい結果を与えます。しかし、 's = Station.objects.filter(country__mpoly__contains = pnt)'は空です。それは問題がformstrと無関係だと私に思い出させます(しかし、この関数は難しいです、私は同意します)。そして、それが問題がm2mクエリーに由来すると主張した主な理由でした。どう思いますか? – neurix

関連する問題