跳转到主要内容

Django地址描述应用。

项目描述

Django Address

Django模型,用于存储和检索邮政地址。


概述

Django Address是一组模型和方法,用于处理邮政地址。

要求

  • Python (3.5, 3.6, 3.7, 3.8)
  • Django (2.2, 3.0)

我们 推荐 并仅官方支持每个Python和Django系列的最新补丁版本。

安装

有关更详细的说明,请参阅包含在此软件包中的示例站点的Readme

pip install django-address

然后,将 address 添加到您的 settings.py 中的 INSTALLED_APPS 列表。

INSTALLED_APPS = [
    # ... 
    'address',
    # ... 
]

您可以将Google API密钥存储为环境变量GOOGLE_API_KEY,或者您可以在settings.py中指定密钥。如果您设置了环境变量,它将覆盖您在settings.py中设置的内容。有关更多信息,包括启用Google Places API,请参阅示例站点

GOOGLE_API_KEY = 'AIzaSyD--your-google-maps-key-SjQBE'

模型

模型结构的合理性在于使输入定义不明确的地址变得简单。所使用的模型字段包括Google Maps API v3(通过做得很好的geocomplete jquery插件),尽可能确定合适的地址。然而,如果不可能实现这一点,则使用原始地址,并由用户负责将地址分解成各个组成部分。

目前假设任何地址都可以用四个组件表示:国家、州、地方和街道地址。此外,如果存在,还可以存储国家代码、州代码和邮政编码。

使用了四个Django模型

  Country
    name
    code

  State
    name
    code
    country -> Country

  Locality
    name
    postal_code
    state -> State

  Address
    raw
    street_number
    route
    locality -> Locality

地址字段

为了简化地址的存储和访问,创建了一个名为AddressFieldForeignKey子类。它提供了一个方便的方法来设置新的地址。

地址字段的ON_DELETE行为

默认情况下,如果您删除了一个与另一个对象相关的地址,Django将使用级联行为。这意味着相关对象也将被删除。您也可以在选择定义地址字段时设置null=True,这样地址将被设置为Null,而不是删除相关对象。有关更多信息及示例,请参阅django-address示例网站的readme文件。

创建

它可以使用与ForeignKey字段相同的可选参数进行创建。例如

  from address.models import AddressField

  class MyModel(models.Model):
    address1 = AddressField()
    address2 = AddressField(related_name='+', blank=True, null=True)

设置值

可以通过分配地址对象来设置值

  addr = Address(...)
  addr.save()
  obj.address = addr

或者通过提供地址组件的字典

  obj.address = {'street_number': '1', 'route': 'Somewhere Ave', ...}

地址组件的结构如下

  {
    'raw': '1 Somewhere Ave, Northcote, VIC 3070, AU',
    'street_number': '1',
    'route': 'Somewhere Ave',
    'locality': 'Northcote',
    'postal_code': '3070',
    'state': 'Victoria',
    'state_code': 'VIC',
    'country': 'Australia',
    'country_code': 'AU'
  }

除了raw字段外,其他字段都可以省略。此外,可以直接设置原始地址

obj.address = 'Out the back of 1 Somewhere Ave, Northcote, Australia'

获取值

访问时,地址字段简单地返回一个地址对象。这样就可以通过对象自然地访问所有组件。例如:

  route = obj.address.route
  state_name = obj.address.locality.state.name

表单

包含一个表单字段,用于简化地址输入。在浏览器中执行Google地图自动完成,并将其传递给视图。如果查找失败,则使用输入的原始值。

待办事项:更多地讨论这个问题。

部分示例

模型

from address.models import AddressField

class Person(models.Model):
  address = AddressField(on_delete=models.CASCADE)

表单

from address.forms import AddressField

class PersonForm(forms.Form):
  address = AddressField()

模板

<head>
{{ form.media }} <!-- needed for JS/GoogleMaps lookup -->
</head>
<body>
  {{ form }}
</body>

运行Django-Address测试

Django-address目前使用django.test.TestCase对部分表单和模型进行了测试。

要运行当前测试

  1. 克隆本地django-address

  2. 导航到示例网站,. /django-address/example_site

  3. 创建一个虚拟环境并安装示例网站依赖项。例如

    mkvirtualenv -p python3 django-address
    pip install -r requirements.txt
    
  4. 运行./manage.py test

关于美国领土的重要说明

Django-address目前不支持美国领土,即保护领地,如关岛或波多黎各的解析。

该主题正在积极考虑中,其状态在#82中描述。

项目状态说明

该项目最初由Luke Hodkinson创建,最初专注于澳大利亚地址。

2015年,Luke开始工作,将项目抽象化,以便它可以处理更多种类的国际地址。

这成为了当前的dev分支。虽然在这方面取得了很好的进展,但分支变得过时,而主分支上继续使用当前模型架构进行发布。

该项目目前处于公开开发中,更多关于项目状态的信息请参阅这个话题

如果您有任何问题、错误报告或建议,请为该项目创建一个新的问题。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分布

django-address-0.2.8.tar.gz (25.2 kB 查看哈希值)

上传时间 源代码

支持者