models.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import logging
  2. from django.contrib.auth import get_user_model
  3. from django.db import models
  4. from django.urls import reverse
  5. from imagekit.models import ImageSpecField
  6. from imagekit.processors import ResizeToFit
  7. from scrobbles.mixins import ScrobblableConstants, ScrobblableMixin
  8. from vrobbler.apps.scrobbles.dataclasses import MoodLogData
  9. logger = logging.getLogger(__name__)
  10. BNULL = {"blank": True, "null": True}
  11. User = get_user_model()
  12. class Mood(ScrobblableMixin):
  13. description = models.TextField(**BNULL)
  14. image = models.ImageField(upload_to="moods/", **BNULL)
  15. image_small = ImageSpecField(
  16. source="thumbnail",
  17. processors=[ResizeToFit(100, 100)],
  18. format="JPEG",
  19. options={"quality": 60},
  20. )
  21. image_medium = ImageSpecField(
  22. source="thumbnail",
  23. processors=[ResizeToFit(300, 300)],
  24. format="JPEG",
  25. options={"quality": 75},
  26. )
  27. def __str__(self):
  28. if self.title:
  29. return self.title
  30. return str(self.uuid)
  31. def get_absolute_url(self):
  32. return reverse("moods:mood-detail", kwargs={"slug": self.uuid})
  33. @property
  34. def subtitle(self) -> str:
  35. return ""
  36. @property
  37. def strings(self) -> ScrobblableConstants:
  38. return ScrobblableConstants(verb="Feeling", tags="thinking")
  39. @property
  40. def logdata_cls(self):
  41. return MoodLogData
  42. @property
  43. def primary_image_url(self) -> str:
  44. if self.image:
  45. return self.image.url
  46. return ""