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 Indirizzo(models.Model): class Meta: verbose_name = 'indirizzo' verbose_name_plural = 'indirizzi' 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, on_delete=models.PROTECT)