111 lines
3.8 KiB
Python
111 lines
3.8 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):
|
|
altro = f'{self.altro},' if self.altro else ''
|
|
return f"{altro} {self.dug} {self.duf} {self.civico}, {self.cap} {self.comune.nome} {self.comune.provincia_id}"
|
|
|
|
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) |