Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kbytesys/django_comuni_italiani
Django app for Italian cities and regions
https://github.com/kbytesys/django_comuni_italiani
Last synced: about 2 months ago
JSON representation
Django app for Italian cities and regions
- Host: GitHub
- URL: https://github.com/kbytesys/django_comuni_italiani
- Owner: kbytesys
- License: lgpl-2.1
- Created: 2015-06-15T15:47:44.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2023-07-05T08:11:59.000Z (over 1 year ago)
- Last Synced: 2024-08-08T19:14:24.040Z (5 months ago)
- Language: Python
- Size: 1000 KB
- Stars: 12
- Watchers: 5
- Forks: 17
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Django Comuni Italiani
### Applicazione Django per gestire comuni, province e regioni----
Questa applicazione django contiene lo stretto necessario per gestire le entità topografiche italiane (regioni, province, città metropolitane, comuni) importate dai dati pubblici dell'istat reperibili al link http://www.istat.it/it/archivio/6789
----
### Requisiti e installazione
I requiti sono i seguenti:
- Python 3+
- Django 1.7+Per l'installazione potete utilizzare pip:
```bash
pip install django-comuni-italiani
```
Oppure prendere l'ultima versione da github https://github.com/kbytesys/django_comuni_italiani
ed eseguire il classico:```bash
./setup.py install
```
Nella configurazione di django aggiungi l'applicazione dove ti è più conveniente:
```python
INSTALLED_APPS = (
...
'comuni_italiani',
...
)```
L'app dispone di alcune viste per chiamate ajax e alto, dovrete dunque aggiungere gli url a quelli del vostro
progetto:```python
urlpatterns = [
...
url(r'^comuni_italiani/', include('comuni_italiani.urls', namespace='comuni_italiani')),
...
]```
In Django 2:
```pythonfrom django.urls import path, include
urlpatterns = [
...
path('comuni_italiani/', include('comuni_italiani.urls', namespace='comuni_italiani')),
...
]```
Un dump dei dati più aggiornati al momento del rilascio è distribuito sotto forma di fixture. Esso può essere caricato
con il seguente comando:```bash
./manage.py loaddata --app comuni_italiani comuni_italiani.json
```
### Chiamate ajax/json
L'app vi fornisce alcune chiamate per l'elenco e la ricerca delle diverse entità attraverso json/ajax.Troverete la documentazione completa nel wiki.
### Supporto django-autocomplete-light
Se utilizzate django-autocomplete-light potete facilmente aggiungere le definizioni per il completamento automatico aggiungendo
la seguente app tra quelle installate:```python
INSTALLED_APPS = (
...
'comuni_italiani',
'comuni_italiani.autocomplete',
...
)
```Ovviamente dovete aver aggiunto autocomplete light seguendo la documentazione che troverete qui.
Gli URL a disposizione per l'autocompletamento sono i seguenti:
* `regione-autocomplete`
* `provincia-autocomplete`
* `cittametropolitana-autocomplete`
* `comune-autocomplete`Supportano il _forward_ (filtro selezionando oggetto padre, es. regione => provincia) tutti tranne regione-autocomplete.
### Un esempio
Model con _ForeignKey_ ad un comune e un form con `django-autocomplete-light`:
```python
# models.pyclass Anagrafica(models.Model):
nome = models.CharField(max_length=32)
email = models.EmailField()
citta = models.ForeignKey(
'comuni_italiani.Comune', on_delete=models.PROTECT
)```
```python
# urls.pyfrom django.urls import path, include
urlpatterns = [
# i tuoi url, es. admin
path('admin/', admin.site.urls),
# includi gli URLs per l'autocompletamento
path('ac/comuni/', include('comuni_italiani.autocomplete.urls')),
]
``````python
# forms.pyfrom dal import autocomplete
from django import forms
from . import modelsclass AnagraficaForm(forms.ModelForm):
class Meta:
model = models.Anagrafica
fields = ('__all__')
widgets = {
'comune': autocomplete.ModelSelect2Multiple(
url='comune-autocomplete'
)
}
```Potete verificarne il funzionamento nell'admin:
```python
# admin.pyfrom django.contrib import admin
from . import models
from . import forms@admin.register(models.Anagrafica)
class AnagraficaAdmin(admin.ModelAdmin):
form = forms.AnagraficaForm
```### Aggiornamento dei dati
Purtroppo l'aggiornamento dei dati non è un'operazione semplice, soprattutto perché i tuoi dati contenuti nelle
applicazioni che svilupperai potrebbero essere legati a dati soggetti a cambiamenti (hanno abrogato una provincia? maledetti!)```bash
./manage.py import_regioni_prov
./manage.py import_comuni```
Entrambi i comandi possono accettare i file csv aggiornati presi dal sito dell'istat. Tuttavia se la loro struttura (o
anche semplicemente il nome della colonna) cambia, l'importazione potrebbe fallire.Per l'aggiornamento delle province e regioni attualmente non viene eseguito alcun particolare controllo nel caso di rimozione,
in quanto è un'operazione delicata che deve essere gestita manualmente in base alle vostre basi dati.L'aggiornamento dei comuni è più intelligente.
- Durante l'aggiornamento se viene rilevato un comune con lo stesso codice istat, ma con diverso nome, verrà richiesto
di confermare l'aggiornamento o saltare il record. Ciò evita probabili inconvenienti durante le (rare)
rinumerazioni dei comuni in una provincia.- Al termine dell'aggiornamento vengono elencati i comuni presenti del db, ma assenti nel csv. Ciò vi aiuterà a rilevare
i comuni eliminati/abrogati/accorpati- Al termine dell'aggiornamento verranno elencati i comuni *omonimi*. Attualmente sono presenti 8 nomi di comune uguali
per un totale di 16 comuniIn ogni caso sarà vostro compito fare i dovuti aggiustamenti.
### FAQ
**A quando risale l'ultimo aggiornamento dei dati?**
L'applicazione ha già inclusi i dati istat aggiornati al 30 gennaio 2015**Perchè documentazione e codice sorgente sono in Italiano?**
Questa appliazione ha uno scopo intimamente riservato al "mercato" italiano. In genere se si ha la necessità
di utilizzare luoghi e lingue diverse consiglio l'uso di django-cities-light oppure di django-cities**Posso aggiornare i comuni eliminandoli e reimportando i dati da zero?**
Assumento che tu possa farlo sbloccando temporaneamente le foreign keys, non è una buona idea. Mentre province e regioni hanno sempre lo stesso codice istat,
il codice istat di un comune può cambiare. Per questo motivo i comuni hanno una chiave numerica autogenerata che potrebbe non essere coerente tra un'importazione
e l'altra.**Nei nuovi dati non trovo più la superfice e l'altitudine dei comuni!**
Nei dati del 2016 l'Istat ha deciso di non includere quelle informazioni nelle loro esportazioni.### TODO
- Form temizzabili per selezionare una provincia da regione e un comune da provincia
(se si usa [django-autocomplete-light](https://github.com/yourlabs/django-autocomplete-light) non c'è bisogno).