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
地址字段
为了简化地址的存储和访问,创建了一个名为AddressField
的ForeignKey
子类。它提供了一个方便的方法来设置新的地址。
地址字段的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
对部分表单和模型进行了测试。
要运行当前测试
-
克隆本地
django-address
。 -
导航到示例网站,.
/django-address/example_site
-
创建一个虚拟环境并安装示例网站依赖项。例如
mkvirtualenv -p python3 django-address pip install -r requirements.txt
-
运行
./manage.py test
关于美国领土的重要说明
Django-address目前不支持美国领土,即保护领地,如关岛或波多黎各的解析。
该主题正在积极考虑中,其状态在#82中描述。
项目状态说明
该项目最初由Luke Hodkinson创建,最初专注于澳大利亚地址。
2015年,Luke开始工作,将项目抽象化,以便它可以处理更多种类的国际地址。
这成为了当前的dev
分支。虽然在这方面取得了很好的进展,但分支变得过时,而主分支上继续使用当前模型架构进行发布。
该项目目前处于公开开发中,更多关于项目状态的信息请参阅这个话题。
如果您有任何问题、错误报告或建议,请为该项目创建一个新的问题。
项目详情
django-address-0.2.8.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | aa0c5b90524d4dee43162929cceb1c546f859c4a16a3fc0497a4896b7ace4236 |
|
MD5 | 206a6afb5029be406129da767ccbdc73 |
|
BLAKE2b-256 | 4f5a488ff3c27477da39cc469aa81b52773169f166dcdc450678913c05aece11 |