123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- from django.db import models
- from misago.core.cache import cache
- from misago.core.utils import slugify
- CACHE_NAME = 'misago_threads_prefixes'
- class PrefixManager(models.Manager):
- def get_forum_prefixes(self, forum):
- prefixes = []
- for prefix in self.get_cached_prefixes():
- if forum.pk in prefix.forums_ids:
- prefixes.append(prefix)
- return prefixes
- def get_cached_prefixes_dict(self):
- prefixes_dict = {}
- for prefix in self.get_cached_prefixes():
- prefixes_dict[prefix.pk] = prefix
- return prefixes_dict
- def get_cached_prefixes(self):
- prefixes = cache.get(CACHE_NAME, 'nada')
- if prefixes == 'nada':
- prefixes = []
- prefixes_qs = self.all().prefetch_related('forums')
- for prefix in prefixes_qs.order_by('name'):
- prefix.forums_ids = [f.pk for f in prefix.forums.all()]
- prefixes.append(prefix)
- cache.set(CACHE_NAME, prefixes)
- return prefixes
- def clear_cache(self):
- cache.delete(CACHE_NAME)
- class Prefix(models.Model):
- forums = models.ManyToManyField('misago_forums.Forum',
- related_name='prefixes')
- name = models.CharField(max_length=255)
- slug = models.SlugField(max_length=255)
- css_class = models.CharField(max_length=255, null=True, blank=True)
- objects = PrefixManager()
- def delete(self, *args, **kwargs):
- Prefix.objects.clear_cache()
- return super(Prefix, self).delete(*args, **kwargs)
- def set_name(self, name):
- self.name = name
- self.slug = slugify(name)
|