import textwrap from django.db import models from django.contrib.auth import get_user_model from tickets.models.ticket import Ticket class Comment(models.Model): author = models.ForeignKey( get_user_model(), on_delete=models.CASCADE, blank=True, null=True, related_name="tickets_comments" ) ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE) date = models.DateTimeField(auto_now_add=True) email_from = models.CharField(max_length=320, blank=True, null=True) email_message_id = models.CharField(max_length=255, blank=True, null=True) body = models.TextField(blank=True) class Meta: unique_together = ("ticket", "email_message_id") @property def author_text(self): if self.author is not None: return str(self.author) assert self.email_message_id is not None return str(self.email_from) @property def snippet(self): body_snippet = textwrap.shorten(self.body, width=35, placeholder="...") # Define here rather than in __str__ so we can use it in the admin list_display return "{author} - {snippet}...".format(author=self.author_text, snippet=body_snippet) def __str__(self): return self.snippet