models.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. from dataclasses import dataclass
  2. from django.apps import apps
  3. from django.db import models
  4. from django.urls import reverse
  5. from scrobbles.dataclasses import BaseLogData, WithPeopleLogData
  6. from scrobbles.mixins import ScrobblableConstants, ScrobblableMixin
  7. BNULL = {"blank": True, "null": True}
  8. @dataclass
  9. class LifeEventLogData(BaseLogData, WithPeopleLogData):
  10. pass
  11. class LifeEvent(ScrobblableMixin):
  12. description = models.TextField(**BNULL)
  13. def __str__(self):
  14. return self.title
  15. def get_absolute_url(self):
  16. return reverse(
  17. "life-events:life-event_detail", kwargs={"slug": self.uuid}
  18. )
  19. @property
  20. def logdata_cls(self):
  21. return LifeEventLogData
  22. @property
  23. def strings(self) -> ScrobblableConstants:
  24. return ScrobblableConstants(verb="Experiencing", tags="camping")
  25. @classmethod
  26. def find_or_create(cls, title: str) -> "LifeEvent":
  27. return cls.objects.filter(title=title).first()
  28. def scrobbles(self, user_id):
  29. Scrobble = apps.get_model("scrobbles", "Scrobble")
  30. return Scrobble.objects.filter(
  31. user_id=user_id, life_event=self
  32. ).order_by("-timestamp")