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

fromstr当我尝试 geodjano 时,我无法成功地进行任何地理空间查询 。为了解决我使用的问题Point

from django.contrib.gis.geos import Point

pnt = Point(-96.876369, 29.905320)

也许您可以尝试使用 hte 点类?

于 2012-04-30T15:58:23.937 回答
1

该问题的解决方案如下:

而不是从Stationsto WorldBorder,我最终选择了另一种方式。attribute_set.all()Django 允许通过该方法进行反向查找。

解决方案是查找哪个国家/地区Point包含

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

然后查找所有Stations包含该国家的所有内容

station_list = country.stations_set.all()

请注意,这set.all()需要获取查询,而不是过滤查询。可以在此处找到有关 set.all() 方法的更多背景信息。

于 2012-05-03T14:34:56.873 回答