models.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. from django.db import models
  2. from datetime import datetime
  3. from django.contrib.auth.models import AbstractUser
  4. # Create your models here.
  5. class User(AbstractUser):
  6. pass
  7. class TipoRadio(models.Model):
  8. #tid = db.Column(db.Integer, primary_key=True, nullable=False)
  9. nome = models.CharField(max_length=64, unique=True)
  10. descrizione = models.CharField(max_length=1000)
  11. #rapporti = db.relationship("RapportoRicezione")
  12. class RapportoRicezione(models.Model):
  13. class Meta:
  14. verbose_name = 'rapporto ricezione'
  15. #verbose_plural_name = 'rapporti ricezione'
  16. #rid = db.Column(db.Integer, primary_key=True)
  17. author = models.ForeignKey(User, related_name='rapporti', on_delete=models.PROTECT)
  18. tipo_radio = models.ForeignKey(TipoRadio, on_delete=models.PROTECT, related_name='rapporti')
  19. date = models.DateField(default=datetime.now)
  20. lat = models.FloatField()
  21. lng = models.FloatField()
  22. comprensibile = models.IntegerField() # TODO: >= 0 <= 5
  23. stabilita = models.IntegerField() # TODO: >= 0 <= 5
  24. def serialize(self):
  25. d = {k: v for k, v in self.__dict__.items() if not k.startswith("_")}
  26. d["colore"] = self.colore
  27. d["radius"] = self.radius
  28. d["explaination"] = self.explaination
  29. return d
  30. @property
  31. def colore(self):
  32. c = self.comprensibile
  33. if c > 3:
  34. return "green"
  35. if c > 1:
  36. return "yellow"
  37. return "red"
  38. @property
  39. def radius(self):
  40. return self.stabilita * 70
  41. @property
  42. def explaination(self):
  43. return """
  44. Ricevuto con %s
  45. Aggiunto il %s da %s
  46. """ % (
  47. self.tipo_radio.nome,
  48. self.date,
  49. self.author.username,
  50. )
  51. def __str__(self):
  52. return "<Rapporto %s del %s>" % (self.rid, self.date)