私が構築しているサイトでは、都市への外部キーを使用してイベントを保存しました。このような:
class Event(models.Model):
name = models.CharField(max_length=255)
...
ciudad = models.ForeignKey(City)
class City(models.Model):
name = models.CharField(max_length=500)
...
lat = models.FloatField()
lon = models.FloatField()
ある都市の数キロでイベントを照会したい。私が実際にやっていることはこれです:
# isInRange takes two cities and a distance in kms and calculates
# if the distance between the cities (by the fields lat and lon and
# one nice formula) is minor than the given distance.
results = []
for event in Event.objects.all():
if isInRange(city, event.city, kms):
results.append(event)
私は知っています、非常に非効率的です。GeoDjango でこれを行うことが可能であることは知っていますが、これはプロジェクト全体で行う必要がある唯一の「地理的なこと」です。その「複雑な」ソリューションを言い訳なしで使用する必要がありますか、それともより効率的な方法でこれを行う方法はありますか?