1

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

対応するジオロケーションを持つプロジェクトを含むモデルがあります:

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

さらに、別のモデルは、国境を持つシェープファイルを表しています。

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