models.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. from enum import Enum
  2. from django.apps import apps
  3. from django.db import models
  4. from django.urls import reverse
  5. from scrobbles.dataclasses import TrailLogData
  6. from scrobbles.mixins import ScrobblableMixin
  7. from locations.models import GeoLocation
  8. BNULL = {"blank": True, "null": True}
  9. class TrailType(Enum):
  10. WOODS = "Woods"
  11. ROAD = "Road"
  12. class Trail(ScrobblableMixin):
  13. description = models.TextField(**BNULL)
  14. trailhead_location = models.ForeignKey(
  15. GeoLocation,
  16. related_name="trailheads",
  17. on_delete=models.DO_NOTHING,
  18. **BNULL,
  19. )
  20. trail_terminus_location = models.ForeignKey(
  21. GeoLocation,
  22. related_name="trail_termini",
  23. on_delete=models.DO_NOTHING,
  24. **BNULL,
  25. )
  26. strava_id = models.CharField(max_length=255, **BNULL)
  27. trailforks_id = models.CharField(max_length=255, **BNULL)
  28. def get_absolute_url(self):
  29. return reverse("trails:trail_detail", kwargs={"slug": self.uuid})
  30. @property
  31. def logdata_cls(self):
  32. return TrailLogData
  33. @classmethod
  34. def find_or_create(cls, title: str) -> "Trail":
  35. return cls.objects.filter(title=title).first()
  36. def scrobbles(self, user_id):
  37. Scrobble = apps.get_model("scrobbles", "Scrobble")
  38. return Scrobble.objects.filter(
  39. user_id=user_id, life_event=self
  40. ).order_by("-timestamp")