sangue/django/dati_geo_app/models.py

110 lines
3.7 KiB
Python

from django.db import models
class Nazione(models.Model):
class Meta:
verbose_name = 'nazione'
verbose_name_plural = 'nazione'
def __str__(self):
return str(self.descrizione)
codifica = models.CharField(max_length=2)
descrizione = models.CharField(null=True, max_length=250)
class Regione(models.Model):
class Meta:
verbose_name = 'regione'
verbose_name_plural = 'regioni'
ordering = ('nome',)
def __str__(self):
return str(self.nome)
nome = models.CharField(primary_key=True, max_length=32,
blank=True, null=False, default='')
class Provincia(models.Model):
class Meta:
verbose_name = 'provincia'
verbose_name_plural = 'province'
ordering = ('nome_esteso',)
def __str__(self):
return f'[{self.sigla}] {self.nome_esteso}'
sigla = models.CharField(primary_key=True,
max_length=2, null=False, blank=False)
nome_esteso = models.CharField(max_length=50, null=False, blank=False)
regione = models.ForeignKey(
Regione, related_name='province', on_delete=models.PROTECT, null=False, blank=False)
class ComuneManager(models.Manager):
def get_by_natural_key(self, nome, provincia):
return self.get(nome__iexact=nome.strip(), provincia__sigla__iexact=provincia.strip())
class Comune(models.Model):
class Meta:
verbose_name = 'comune'
verbose_name_plural = 'comuni'
unique_together = ('nome', 'provincia',)
ordering = ('nome','provincia_id',)
objects = ComuneManager()
def __str__(self):
return f'{self.nome} ({self.provincia_id})'
def save(self, *args, **kwargs):
self.nome = self.nome.strip()
self.provincia_id = self.provincia_id.strip().upper()
super().save(*args, **kwargs)
def natural_key(self):
return (self.nome.strip(), self.provincia_id.strip().upper())
nome = models.CharField(max_length=60)
provincia = models.ForeignKey(
Provincia, related_name='comuni', on_delete=models.PROTECT, null=False, blank=False)
cap = models.ManyToManyField(to='CAP',related_name='comuni')
codice_istat = models.CharField(max_length=6)
codice_nazionale = models.CharField(max_length=4)
class CAP(models.Model):
class Meta:
verbose_name_plural = verbose_name = 'CAP'
def __str__(self):
return str(self.codice)
codice = models.CharField(primary_key=True, max_length=5)
class DUG(models.Model):
class Meta:
verbose_name = 'denominazione urbanistica generica'
verbose_name_plural = 'denominazioni urbanistiche generiche'
def __str__(self):
return self.nome.capitalize()
nome = models.CharField(primary_key=True, max_length=40)
class AbstractIndirizzo(models.Model):
class Meta:
verbose_name = 'indirizzo'
verbose_name_plural = 'indirizzi'
abstract = True
def __str__(self):
return f"{self.dug} {self.duf} {self.civico}, {self.comune}"
dug = models.ForeignKey(DUG, blank=False, null=False, verbose_name='denominazione urbanistica generica', on_delete=models.PROTECT)
duf = models.CharField(max_length=256, blank=False, null=False, verbose_name="denominazione urbanistica ufficiale", help_text="Il nome della via/piazza/ecc...")
civico = models.CharField(max_length=256, blank=False, null=False)
comune = models.ForeignKey(Comune, on_delete=models.PROTECT)
cap = models.ForeignKey(CAP, on_delete=models.PROTECT)
altro = models.CharField(max_length=2048, blank=True, null=False, default='', help_text='Es.: interno, scala, appartamento...')
nazione = models.ForeignKey(Nazione, blank=True, null=True, on_delete=models.PROTECT)