Skip to content

Commit

Permalink
Added Subregion class and replaced region_# naming scheme.
Browse files Browse the repository at this point in the history
Moved common code from Region/City/District into base classes.
  • Loading branch information
Qarterd committed Apr 5, 2012
1 parent 8c1f51c commit 85f2f70
Show file tree
Hide file tree
Showing 6 changed files with 187 additions and 174 deletions.
20 changes: 12 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,13 @@ Nearest city to a given geo-coord (longitude, latitude):
nearest = City.objects.distance(london.location).exclude(id=london.id).order_by('distance')[:5]
```

Get a list of all cities in a state or county:

```python
City.objects.filter(country__name="United States", region__name="Texas")
City.objects.filter(country__name="United States", subregion__name="Orange County")
```

Get all countries in Japanese preferring official names if available, fallback on ASCII names:

```python
Expand All @@ -58,23 +65,20 @@ Gather names of Tokyo from all CITIES_LOCALES:
[name for locale in cities.conf.settings.locales
for name in geo_alt_names[City][locale].objects.filter(geo__name='Tokyo')]
```

Get all postal codes for Ontario, Canada (only first 3 letters available due to copyright restrictions):

```python
postal_codes['CA'].objects.filter(region_0_name='Ontario')
postal_codes['CA'].objects.filter(region__name='Ontario')
```

Get region objects for US postal code:

```python
Region.objects.filter(postal_codes_US__code='90210')
[<Region: Los Angeles County, California, United States>]
```

Get a list of cities in the state of Texas:

```python
City.objects.filter(country__name="United States", region__region_parent__name="Texas")
[<Region: California, United States>]
Subregion.objects.filter(postal_codes_US__code='90210')
[<Subregion: Los Angeles County, California, United States>]
```

Install
Expand Down
29 changes: 17 additions & 12 deletions cities/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,26 +7,31 @@ class CountryAdmin(admin.ModelAdmin):

admin.site.register(Country, CountryAdmin)

class RegionAdmin(admin.ModelAdmin):
class RegionBaseAdmin(admin.ModelAdmin):
ordering = ['name_std']
list_display = ['name_std', 'parent', 'code', 'level']
list_display = ['name_std', 'parent', 'code']
search_fields = ['name', 'name_std', 'code']
raw_id_fields = ['region_parent']

class RegionAdmin(RegionBaseAdmin): pass

admin.site.register(Region, RegionAdmin)

class CityAdmin(admin.ModelAdmin):
ordering = ['name_std']
list_display = ['name_std', 'parent', 'population']
search_fields = ['name', 'name_std']
class SubregionAdmin(RegionBaseAdmin):
raw_id_fields = ['region']

admin.site.register(City, CityAdmin)
admin.site.register(Subregion, SubregionAdmin)

class DistrictAdmin(admin.ModelAdmin):
class CityBaseAdmin(admin.ModelAdmin):
ordering = ['name_std']
list_display = ['name_std', 'parent', 'population']
search_fields = ['name', 'name_std']

class CityAdmin(CityBaseAdmin):
raw_id_fields = Region.levels

admin.site.register(City, CityAdmin)

class DistrictAdmin(CityBaseAdmin):
raw_id_fields = ['city']

admin.site.register(District, DistrictAdmin)
Expand All @@ -42,8 +47,8 @@ class GeoAltNameAdmin(admin.ModelAdmin):

class PostalCodeAdmin(admin.ModelAdmin):
ordering = ['code']
list_display = ['code', 'name', 'region_0_name', 'region_1_name', 'region_2_name']
search_fields = ['code', 'name', 'region_0_name', 'region_1_name', 'region_2_name']
raw_id_fields = ['region']
list_display = ['code', 'name', 'region_name', 'subregion_name', 'district_name']
search_fields = ['code', 'name', 'region_name', 'subregion_name', 'district_name']
raw_id_fields = Region.levels

[admin.site.register(postal_code, PostalCodeAdmin) for postal_code in postal_codes.values()]
9 changes: 5 additions & 4 deletions cities/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@
'filename': 'countryInfo.txt',
'urls': [url_bases['geonames']['dump']+'{filename}', ]
},
'region_0': {
'region': {
'filename': 'admin1CodesASCII.txt',
'urls': [url_bases['geonames']['dump']+'{filename}', ]
},
'region_1': {
'subregion': {
'filename': 'admin2Codes.txt',
'urls': [url_bases['geonames']['dump']+'{filename}', ]
},
Expand Down Expand Up @@ -70,8 +70,7 @@
'all',
'country',
'region',
'region_0',
'region_1',
'subregion',
'city',
'district',
'alt_name',
Expand All @@ -81,6 +80,7 @@
import_opts_all = [
'country',
'region',
'subregion',
'city',
'district',
'alt_name',
Expand All @@ -94,6 +94,7 @@ class HookException(Exception): pass
plugin_hooks = [
'country_pre', 'country_post',
'region_pre', 'region_post',
'subregion_pre', 'subregion_post',
'city_pre', 'city_post',
'district_pre', 'district_post',
'alt_name_pre', 'alt_name_post',
Expand Down
Loading

0 comments on commit 85f2f70

Please sign in to comment.