models.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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)
  26. tipo_radio = models.ForeignKey(
  27. TipoRadio, on_delete=models.PROTECT, related_name="rapporti"
  28. )
  29. created = models.DateField(default=datetime.now)
  30. lat = models.FloatField()
  31. lng = models.FloatField()
  32. comprensibile = models.IntegerField() # TODO: >= 0 <= 5
  33. stabilita = models.IntegerField() # TODO: >= 0 <= 5
  34. def serialize(self):
  35. d = {k: v for k, v in self.__dict__.items() if not k.startswith("_")}
  36. d['id'] = self.id
  37. d["colore"] = self.colore
  38. d["radius"] = self.radius
  39. d["explaination"] = self.explaination
  40. return d
  41. @property
  42. def colore(self):
  43. colors = ["darkred", "red", "yellow", "orange", "#90c90d", "green"]
  44. c = int(self.comprensibile)
  45. return colors[c]
  46. @property
  47. def radius(self):
  48. return int(self.stabilita) * 70
  49. @property
  50. def explaination(self):
  51. return """
  52. Ricevuto con %s
  53. Aggiunto il %s da %s
  54. """ % (
  55. self.tipo_radio.nome,
  56. self.created,
  57. self.author.display_name,
  58. )
  59. @property
  60. def edit_link(self):
  61. return reverse('admin:rxmapp_rapportoricezione_change', kwargs=dict(object_id=self.id))
  62. def __str__(self):
  63. return "<Rapporto %s del %s>" % (self.pk, self.created)