models.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. from django.db import models
  2. from django.urls import reverse
  3. from datetime import datetime
  4. from django.contrib.auth.models import AbstractUser
  5. # Create your models here.
  6. class User(AbstractUser):
  7. @property
  8. def display_name(self):
  9. name = "%s %s" % (self.first_name, self.last_name)
  10. if name:
  11. return name
  12. return self.username
  13. class TipoRadio(models.Model):
  14. class Meta:
  15. verbose_name = "tipo radio"
  16. verbose_name_plural = "tipi radio"
  17. nome = models.CharField(max_length=64, unique=True)
  18. descrizione = models.CharField(max_length=1000)
  19. def __str__(self):
  20. return self.nome
  21. class RapportoRicezione(models.Model):
  22. class Meta:
  23. verbose_name = "rapporto ricezione"
  24. verbose_name_plural = "rapporti ricezione"
  25. author = models.ForeignKey(User, related_name="rapporti", on_delete=models.PROTECT, verbose_name='autore')
  26. tipo_radio = models.ForeignKey(
  27. TipoRadio, on_delete=models.PROTECT, related_name="rapporti"
  28. )
  29. created = models.DateField(default=datetime.now, verbose_name='Data della rilevazione')
  30. lat = models.FloatField()
  31. lng = models.FloatField()
  32. indirizzo = models.CharField(default='', max_length=400,
  33. help_text='Indirizzo indicativo. Usato solo per descrizione. '
  34. 'Per piazzare il marcatore vengono usate solo le coordinate')
  35. comprensibile = models.IntegerField() # TODO: >= 0 <= 5
  36. stabilita = models.IntegerField() # TODO: >= 0 <= 5
  37. def serialize(self):
  38. d = {k: v for k, v in self.__dict__.items() if not k.startswith("_")}
  39. d["id"] = self.id
  40. d["colore"] = self.colore
  41. d["radius"] = self.radius
  42. d["explaination"] = self.explaination
  43. return d
  44. @property
  45. def colore(self):
  46. colors = ["darkred", "red", "orange", "yellow", "#90c90d", "green"]
  47. c = int(self.comprensibile)
  48. return colors[c]
  49. @property
  50. def radius(self):
  51. raggi = [5, 10, 30, 100, 500, 1000]
  52. return raggi[self.stabilita]
  53. @property
  54. def explaination(self):
  55. return """
  56. Ricevuto con %s
  57. Aggiunto il %s da %s
  58. """ % (
  59. self.tipo_radio.nome,
  60. self.created,
  61. self.author.display_name,
  62. )
  63. @property
  64. def edit_link(self):
  65. return reverse(
  66. "admin:rxmapp_rapportoricezione_change", kwargs=dict(object_id=self.id)
  67. )
  68. def __str__(self):
  69. if self.indirizzo:
  70. return self.indirizzo
  71. return "<Rapporto %s del %s>" % (self.pk, self.created)