1

嗨 Stackoverflow 人,

我有一个模型,其中包含具有相应地理位置的项目:

class Project(models.Model):
    name = models.CharField(_('Project Name'), max_length=100, null=True, blank=True)
    geolocation = models.PointField(_('Project Location'))
    ...

此外,另一个模型表示带有国家边界的 shapefile:

class WorldBorder(models.Model):
    name = models.CharField(max_length=50)
    mpoly = models.MultiPolygonField()
    objects = models.GeoManager()

    class Meta:
        ordering = ('name',)
    def __unicode__(self):
        return self.name

如何查询 Project 并按地理位置的国家/地区名称对结果进行排序? 像这样的查询

d = Project.objects.all().order_by(geolocation__name)

不起作用,因为地理位置不是外键。我真的遍历所有项目并像下面的示例中那样手动确定国家吗?

projects = Project.objects.all()
result = []
for project in projects
    country = WorldBorder.objects.filter(mpoly__contains = project.geolocation)
    foo = [project.name, country]
    result.append(foo)
# now sort the list according to the country
result = sorted(result, key=itemgetter(1))

应该有更专业、更优雅的解决方案?有经验的 Python 人有什么建议吗?我可以为此目的使用联接吗?

谢谢你的建议!

4

0 回答 0