thread.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. from django.db import models
  2. from misago.conf import settings
  3. from misago.core.utils import slugify
  4. class Thread(models.Model):
  5. forum = models.ForeignKey('misago_forums.Forum')
  6. weight = models.PositiveIntegerField(default=0)
  7. prefix = models.ForeignKey('misago_threads.Prefix',
  8. null=True, blank=True,
  9. on_delete=models.SET_NULL)
  10. title = models.CharField(max_length=255)
  11. slug = models.SlugField(max_length=255)
  12. replies = models.PositiveIntegerField(default=0)
  13. has_reported_posts = models.BooleanField(default=False)
  14. has_moderated_posts = models.BooleanField(default=False)
  15. has_hidden_posts = models.BooleanField(default=False)
  16. started_on = models.DateTimeField()
  17. first_post = models.ForeignKey('misago_threads.Post', related_name='+',
  18. null=True, blank=True,
  19. on_delete=models.SET_NULL)
  20. starter = models.ForeignKey(settings.AUTH_USER_MODEL,
  21. null=True, blank=True,
  22. on_delete=models.SET_NULL)
  23. starter_name = models.CharField(max_length=255)
  24. starter_slug = models.SlugField(max_length=255)
  25. last_post_on = models.DateTimeField()
  26. last_post = models.ForeignKey('misago_threads.Post', related_name='+',
  27. null=True, blank=True,
  28. on_delete=models.SET_NULL)
  29. last_poster = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='+',
  30. null=True, blank=True,
  31. on_delete=models.SET_NULL)
  32. last_poster_name = models.CharField(max_length=255, null=True, blank=True)
  33. last_poster_slug = models.SlugField(max_length=255, null=True, blank=True)
  34. is_poll = models.BooleanField(default=False)
  35. is_moderated = models.BooleanField(default=False)
  36. is_hidden = models.BooleanField(default=False)
  37. is_closed = models.BooleanField(default=False)
  38. def set_title(self, title):
  39. self.title = title
  40. self.slug = slugify(title)
  41. def set_first_post(self, post):
  42. self.started_on = post.posted_on
  43. self.first_post = post
  44. self.starter = post.poster
  45. self.starter_name = post.poster_name
  46. if post.poster:
  47. self.starter_slug = post.poster.slug
  48. else:
  49. self.starter_slug = slugify(post.poster_name)
  50. def set_last_post(self, post):
  51. self.last_post_on = post.posted_on
  52. self.last_post = post
  53. self.last_poster = post.poster
  54. self.last_poster_name = post.poster_name
  55. if post.poster:
  56. self.last_poster_slug = post.poster.slug
  57. else:
  58. self.last_poster_slug = slugify(post.poster_name)