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 の人々からの提案はありますか? その目的で結合を使用できますか?
ご提案ありがとうございます。