post.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. from django.db import models
  2. from misago.conf import settings
  3. from misago.threads.checksums import is_post_valid
  4. class Post(models.Model):
  5. forum = models.ForeignKey('misago_forums.Forum')
  6. thread = models.ForeignKey('misago_threads.Thread')
  7. poster = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True,
  8. on_delete=models.SET_NULL)
  9. poster_name = models.CharField(max_length=255)
  10. poster_ip = models.GenericIPAddressField()
  11. original = models.TextField()
  12. parsed = models.TextField()
  13. checksum = models.CharField(max_length=64)
  14. mentions = models.ManyToManyField(settings.AUTH_USER_MODEL,
  15. related_name="mention_set")
  16. has_attachments = models.BooleanField(default=False)
  17. pickled_attachments = models.TextField(null=True, blank=True)
  18. posted_on = models.DateTimeField()
  19. updated_on = models.DateTimeField()
  20. edits = models.PositiveIntegerField(default=0)
  21. last_editor = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='+',
  22. null=True, blank=True,
  23. on_delete=models.SET_NULL)
  24. last_editor_name = models.CharField(max_length=255, null=True, blank=True)
  25. last_editor_slug = models.SlugField(max_length=255, null=True, blank=True)
  26. is_reported = models.BooleanField(default=False, db_index=True)
  27. is_moderated = models.BooleanField(default=False)
  28. is_hidden = models.BooleanField(default=False)
  29. is_protected = models.BooleanField(default=False)
  30. @property
  31. def short(self):
  32. if self.is_valid:
  33. if len(self.original) > 150:
  34. return '%s...' % self.original[:150].strip()
  35. else:
  36. return self.original
  37. else:
  38. return ''
  39. @property
  40. def is_valid(self):
  41. return is_post_valid(self)