Звучит так, будто вы хотите, чтобы пользователи вводили географическую информацию, например адрес или почтовый индекс, в текстовый поиск.Это то, как я это сделал, хотя пока не уверен, как оно масштабируется.Я только что закончил это 5 минут назад.
Вы должны создать пользовательскую форму поиска с подклассами из SearchForm или одной из других опций (для меня это был FacetedSearchForm).Замените метод поиска.
Сначала превратите строку поиска в точку.http://code.google.com/p/geopy/wiki/GettingStarted
class MainSearchForm(FacetedSearchForm):
def search(self):
query = self.cleaned_data['q']
g = geocoders.Google()
place, (lat, lng) = g.geocode('%s' % query)
pnt = fromstr('POINT(%s %s)' % (lng, lat), srid=4326)
Затем возьмите набор поисковых запросов, я использовал RelatedSearchQuerySet , поскольку он позволяет вам использовать load_all_queryset (), где я фильтровал по расстоянию.Это GeoDjango на помощь с GeoDjango Distance Queries .С помощью запроса расстояния вы можете выбрать способ фильтрации с расстоянием меньше, больше, чем и т. Д. И само расстояние в любых единицах измерения, которые вы хотите.
sqs = RelatedSearchQuerySet().load_all()
sqs = sqs.load_all_queryset(Listing,
Listing.objects.filter(location__distance_lte=(pnt, D(mi=20))))
return sqs
Это должно быть надежное начало.Надеюсь, это направит вас в правильном направлении.