2012-01-25 5 views
3

Кто-нибудь успешно это сделал?Django - Объединение города, штата и почтового индекса в одно поле

Попытка повторить функциональность, аналогичную той, что содержится в http://www.walmart.com/cservice/ca_storefinder.gsp

Где пользователь может ввести либо город, штат или почтовый индекс и есть интеллектуальный поиск

Я начал попытку, используя немного регулярных выражений и разделение полей, хотя я быстро понял, что это была задача, которая потребует больше, чем немного подумать, чтобы заставить ее работать разумно для конечного пользователя.

подходы к рассмотрению

  • живые Аякса автозаполнения звонки
  • сфинкс полнотекстовый поиск
  • регулярное выражение сторона поиск дб
  • регулярное выражение пользовательского ввода Validate

фрагмент кода, таким образом, значительно ниже

import re 

from general.models import ZipCode 

def findLocation(value): 
    match = re.search(r"\d{5}", value) 
    if match: 
     try: 
      return Zipcode.objects.get(zip=value) 
     except ZipCode.DoesNotExist: 
      return False 
    else: 
     kwargs = {} 
     vals = value.split(',') 
     if len(vals) > 1: 
      kwargs['city'] = value[:len(value)-len(vals[-1])-1] 
      state = vals[-1].strip() 
      if len(state) == 2: 
       kwargs['state'] = state 
       else: 
       kwargs['state_name'] = state 
     else: 
      kwargs['city'] = value 
     return ZipCode.objects.filter(**kwargs) 

ZipCode в этот пример представляет собой модель базы данных, которая содержит все американские почтовые индексы/состояния/государственные сокращения/города есть копия доступна на GitHub на

https://github.com/amites/django-general

ответ

1

Для такого рода расширенных функций, вы бы лучше использовать некоторый специальный инструмент, как the Solr search engine.

Если вы этого не знаете, это основанная на Java, с открытым исходным кодом и очень мощная поисковая система, с возможностью добавления функций поиска местоположения. Действия поиска будут выполняться через веб-службу (xml, json и т. Д.).

Шаги в основном следующие: вы устанавливаете solr на сервере, настраиваете схему (способ хранения и индексирования данных) импортировать данные из базы данных и привязать форму поиска к веб-службе.

Возможно, вы захотите прочитать this article to have more informations about geolocation searches (возможно, немного устаревший, вам придется проверить).

+0

Благодарим вас за предложение - я встретил Solr до этого, хотя ничего не строил с ним - это звучит как отличный прецедент для тех, кому нужно держать вещи в доме – Alvin

+0

Google Geocoding казался до тех пор, пока я не пересмотрю цены - 2500 максимальных запросов в день без бизнес-лицензии, которая становится дорогой быстро для некоммерческой - предположите, что это будет несколько полей на данный момент и SOLR позже – Alvin

2

Недавно столкнувшись с подобной проблемой, я использовал Google Geocoding API для этого. Хорошая часть - вам не нужно разбирать адресную строку вообще. Вы просто передаете его в Google, и это касается разбора. Если местоположение найдено, оно возвращает вам структурированный объект, описывающий адрес. Вы можете извлечь любые интересующие вас адреса.

Конечно, это решение работает только в том случае, если у вас есть веб-сайт, и ваше использование API геолокации разрешено Google Maps TOS.

+0

Это будет для некоммерческой так что это похоже на самую быструю реализацию - спасибо за предложение – Alvin

+0

Я использовал API Карт Google для различных проектов раньше, хотя при дальнейшем рассмотрении TOS структура ценообразования будет стоить непомерно. Отличная идея для небольших случаев использования. – Alvin

Смежные вопросы