models.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. from django.conf import settings
  2. from django.db import models
  3. from django.utils.translation import ugettext_lazy as _
  4. from mptt.models import MPTTModel, TreeForeignKey
  5. class ForumManager(models.Manager):
  6. def treelist(self, forums, parent=None):
  7. forums_list = []
  8. parents = {}
  9. for forum in Forum.objects.filter(pk__in=forums).filter(level__lte=3).order_by('lft'):
  10. forum.subforums = []
  11. parents[forum.pk] = forum
  12. if forum.parent_id in parents:
  13. parents[forum.parent_id].subforums.append(forum)
  14. else:
  15. forums_list.append(forum)
  16. return forums_list
  17. class Forum(MPTTModel):
  18. parent = TreeForeignKey('self', null=True, blank=True, related_name='children')
  19. type = models.CharField(max_length=12)
  20. token = models.CharField(max_length=255,null=True, blank=True)
  21. name = models.CharField(max_length=255)
  22. slug = models.SlugField(max_length=255)
  23. description = models.TextField(null=True, blank=True)
  24. description_preparsed = models.TextField(null=True, blank=True)
  25. threads = models.PositiveIntegerField(default=0)
  26. threads_delta = models.PositiveIntegerField(default=0)
  27. posts = models.PositiveIntegerField(default=0)
  28. posts_delta = models.IntegerField(default=0)
  29. redirects = models.PositiveIntegerField(default=0)
  30. redirects_delta = models.IntegerField(default=0)
  31. #last_thread = models.ForeignKey('threads.Thread', related_name='+', null=True, blank=True)
  32. last_thread_name = models.CharField(max_length=255, null=True, blank=True)
  33. last_thread_slug = models.SlugField(null=True, blank=True)
  34. last_thread_date = models.DateTimeField(null=True, blank=True)
  35. last_poster = models.ForeignKey('users.User', related_name='+', null=True, blank=True)
  36. last_poster_name = models.CharField(max_length=255, null=True, blank=True)
  37. last_poster_slug = models.SlugField(max_length=255, null=True, blank=True)
  38. last_poster_style = models.CharField(max_length=255, null=True, blank=True)
  39. prune_start = models.PositiveIntegerField(default=0)
  40. prune_last = models.PositiveIntegerField(default=0)
  41. redirect = models.CharField(max_length=255, null=True, blank=True)
  42. style = models.CharField(max_length=255, null=True, blank=True)
  43. closed = models.BooleanField(default=False)
  44. objects = ForumManager()
  45. def __unicode__(self):
  46. if self.token == 'root':
  47. return unicode(_('Root Category'))
  48. return unicode(self.name)
  49. def set_description(self, description):
  50. self.description = description.strip()
  51. self.description_preparsed = ''
  52. if self.description:
  53. import markdown
  54. self.description_preparsed = markdown.markdown(description, safe_mode='escape', output_format=settings.OUTPUT_FORMAT)
  55. def move_content(self, target):
  56. pass
  57. def prune(self):
  58. pass