Джанго - объединение города, штата и почтового индекса в одно поле - PullRequest
3 голосов
/ 25 января 2012

Кто-нибудь успешно сделал это?

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

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

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

*Рассмотрено 1009 * подходов
  • live ajax автозавершение вызовов
  • полнотекстовый поиск Sphinx
  • поиск по регулярному выражению на стороне базы данных
  • регулярное выражение для подтверждения ввода пользователя *Ниже приведен фрагмент кода 1019 *

ниже

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

Ответы [ 2 ]

2 голосов
/ 25 января 2012

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

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

1 голос
/ 25 января 2012

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...