Django的波兰地区和城市数据。
django-cities-teryt的Python项目详细描述
Django的波兰地区和城市数据。
此应用程序提供模型、管理集成以及在数据库中导入区域和城市数据的命令。
数据是从TERYT数据库中提取的 (国家领土司的国家正式登记册)。Teryt由 波兰中央统计局(GUS)
- 数据库包含:
- 各省
- 县
- 市政府
- 村庄
- 城市
- 市区
安装
安装django cities teryt
pip install django-cities-teryt
或开发版本
pip install -e git+git@github.com:lukaszbanasiak/django-cities-teryt.git#egg=cities_teryt
将cities_teryt添加到INSTALLED_APPS
INSTALLED_APPS=(...'cities_teryt',)
现在,运行syncdb,它将只为模型创建表
./manage.py syncdb
配置
- 从teryt网站http://www.stat.gov.pl/broker/access/prefile/listPreFiles.jspa下载SIMC和TERCxml文件,并将它们保存到一个目录中。
- 在您的settings.py完整路径中设置上述目录
# Default directory is `import` dir in `django-cities-teryt` app directoryCITIES_TERYT_IMPORT_DIR='/path/to/dir'
导入数据
要用所有teryt数据填充数据库,请使用命令
./manage.py cities_teryt --data all --import
要删除数据,请使用命令
./manage.py cities_teryt --data all --flush
要对特定类型的数据进行操作,请在--data参数之后枚举它们
./manage.py cities_teryt --data province, county, municipality --import ./manage.py cities_teryt --data city, village, district --flush
注意
数据是有关系的,所以最好把所有东西都导入。 数据很大,需要时间导入(没有进度显示)。 详细程度通过日志记录来控制。
示例
按名称获取City
>>>City.objects.get(name='Swarzędz')<City:Swarzędz(0971502)>
要获得这个城市Municipality的名称,我们可以使用parent方法或直接调用municipalityattrib
>>>City.objects.get(name='Swarzędz').parent<Municipality:Swarzędz(302116)>>>>City.objects.get(name='Swarzędz').municipality<Municipality:Buk(302103)>>>>Municipality.objects.get(city__name='Swarzędz')<Municipality:Swarzędz(302116)>
这样我们也可以得到Province或County
>>>City.objects.get(name='Swarzędz').province<Province:wielkopolskie(30)>>>>Province.objects.get(city__name='Swarzędz')<Province:wielkopolskie(30)>
…甚至Districts
>>>c=City.objects.get(name='Swarzędz')>>>c.district_set.all()[<District:NowaWieś(0971519)>,<District:Zieleniec(0971525)>]>>>District.objects.filter(city=c)[<District:NowaWieś(0971519)>,<District:Zieleniec(0971525)>]
将所有Cities列在同一County
>>>County.objects.get(city__name='Swarzędz').city_set.all()[<City:Buk(0970520)>,<City:MurowanaGoślina(0971152)>,<City:Kostrzyn(0970885)>,<City:Mosina(0971057)>,<City:Pobiedziska(0971287)>,<City:Puszczykowo(0971376)>,<City:Kórnik(0970922)>,<City:Swarzędz(0971502)>,<City:Luboń(0970974)>,<City:Stęszew(0971494)>]
获得漂亮的显示名称
# Village, Municipality, County, Province>>>printVillage.objects.get(name='Kaczkowo',province__name='wielkopolskie').get_display_name()Kaczkowo,Rydzyna,leszczyński,wielkopolskie# `Municipality` and `County` for "Poznań" is the same so we got only `City` and `Province` name>>>printCity.objects.get(name='Poznań').get_display_name()Poznań,wielkopolskie
要求
见requirements.txt