prefix.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from django.db import models
  2. from misago.core.cache import cache
  3. from misago.core.utils import slugify
  4. CACHE_NAME = 'misago_threads_prefixes'
  5. class PrefixManager(models.Manager):
  6. def get_forum_prefixes(self, forum):
  7. prefixes = []
  8. for prefix in self.get_cached_prefixes():
  9. if forum.pk in prefix.forums_ids:
  10. prefixes.append(prefix)
  11. return prefixes
  12. def get_cached_prefixes_dict(self):
  13. prefixes_dict = {}
  14. for prefix in self.get_cached_prefixes():
  15. prefixes_dict[prefix.pk] = prefix
  16. return prefixes_dict
  17. def get_cached_prefixes(self):
  18. prefixes = cache.get(CACHE_NAME, 'nada')
  19. if prefixes == 'nada':
  20. prefixes = []
  21. prefixes_qs = self.all().prefetch_related('forums')
  22. for prefix in prefixes_qs.order_by('name'):
  23. prefix.forums_ids = [f.pk for f in prefix.forums.all()]
  24. prefixes.append(prefix)
  25. cache.set(CACHE_NAME, prefixes)
  26. return prefixes
  27. def clear_cache(self):
  28. cache.delete(CACHE_NAME)
  29. class Prefix(models.Model):
  30. forums = models.ManyToManyField('misago_forums.Forum',
  31. related_name='prefixes')
  32. name = models.CharField(max_length=255)
  33. slug = models.SlugField(max_length=255)
  34. css_class = models.CharField(max_length=255, null=True, blank=True)
  35. objects = PrefixManager()
  36. def delete(self, *args, **kwargs):
  37. Prefix.objects.clear_cache()
  38. return super(Prefix, self).delete(*args, **kwargs)
  39. def set_name(self, name):
  40. self.name = name
  41. self.slug = slugify(name)