Skip to main content

Polish region and city data for Django.

Project description

Polish region and city data for Django.

This app provides models, admin integration and commands to import region and city data in your database.

The data is pulled from TERYT database (National Official Register of the Territorial Division of the Country). TERYT is maintained by Polish Central Statistical Office (GUS)

Database contains:
  • provinces
  • counties
  • municipalities
  • villages
  • cities
  • city districts


Install django-cities-teryt

pip install django-cities-teryt

Or dev version

pip install -e

Add cities_teryt to your INSTALLED_APPS


Now, run syncdb, it will only create tables for models

./ syncdb


  1. Download SIMC and TERC xml files from TERYT website and save them to one directory.
  2. Setup in your full path to above directory
# Default directory is `import` dir in `django-cities-teryt` app directory
CITIES_TERYT_IMPORT_DIR = '/path/to/dir'

Importing data

To populate your database with all TERYT data use command

./ cities_teryt --data all --import

To remove data use command

./ cities_teryt --data all --flush

To operate on specific type of data enumerate them after --data argument

./ cities_teryt --data province, county, municipality --import
./ cities_teryt --data city, village, district --flush


Data have relations so it’s best to import everything. Data are large and take time to import (there’s no progress display). Verbosity is controlled through LOGGING.


Get City by name

>>> City.objects.get(name='Swarzędz')
<City: Swarzędz (0971502)>

To get name of Municipality of this City we can use parent method or call directly municipality attrib

>>> 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)>

In this way we can get also Province or County

>>> City.objects.get(name='Swarzędz').province
<Province: wielkopolskie (30)>
>>> Province.objects.get(city__name='Swarzędz')
<Province: wielkopolskie (30)>

… or even Districts

>>> c = City.objects.get(name='Swarzędz')
>>> c.district_set.all()
[<District: Nowa Wieś (0971519)>, <District: Zieleniec (0971525)>]
>>> District.objects.filter(city=c)
[<District: Nowa Wieś (0971519)>, <District: Zieleniec (0971525)>]

List all Cities in the same County

>>> County.objects.get(city__name='Swarzędz').city_set.all()
[<City: Buk (0970520)>, <City: Murowana Goś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)>]

Get pretty display name

# Village, Municipality, County, Province
>>> print Village.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
>>> print City.objects.get(name='Poznań').get_display_name()
Poznań, wielkopolskie


See requirements.txt

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for django-cities-teryt, version 1.0.1
Filename, size File type Python version Upload date Hashes
Filename, size (13.9 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page