Django - 结合城市,国家和地区邮编到单个字段中

时间:2012-01-25 09:14:29

标签: python django user-interface

有没有人成功完成过这项工作?

尝试复制类似于找到的功能 http://www.walmart.com/cservice/ca_storefinder.gsp

用户可以输入城市,州或邮政编码并进行智能查询

我开始尝试使用一些正则表达式和拆分字段但我很快意识到这是一项需要更多考虑才能使其最终用户能够智能工作的任务

考虑的方法

  • 直播ajax自动完成通话
  • Sphinx全文搜索
  • regex search db side
  • 正则表达式验证用户输入
截至目前为止的

片段

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 个答案:

答案 0 :(得分:2)

最近遇到类似的问题,我使用Google的Geocoding API来做到这一点。好的部分是你根本不需要解析地址字符串。你只是将它传递给谷歌,它处理解析。如果找到某个位置,它会返回一个描述该地址的结构化对象。您可以提取所需的任何地址。

当然,只有拥有网站并且Google Maps TOS允许您使用地理位置API时,此解决方案才有效。

答案 1 :(得分:1)

对于这种高级功能,您最好使用一些专用工具,例如the Solr search engine

如果你不知道它,它是一个基于java的开源,非常强大的搜索引擎,能够添加位置搜索功能。搜索操作将通过Web服务(xml,json等)执行

步骤基本如下:在服务器上安装solr,配置架构(存储和索引数据的方法),从数据库导入数据,并将搜索表单绑定到Web服务。

您可能需要阅读this article to have more informations about geolocation searches(可能稍微过时,您需要检查)。