from __future__ import unicode_literals from django.conf import settings from django.db import models from django.utils.encoding import python_2_unicode_compatible from django.utils.translation import ugettext_lazy as _ from documents.models import Document from .events import event_document_comment_create, event_document_comment_delete @python_2_unicode_compatible class Comment(models.Model): document = models.ForeignKey( Document, db_index=True, related_name='comments', verbose_name=_('Document') ) user = models.ForeignKey( settings.AUTH_USER_MODEL, editable=False, related_name='comments', verbose_name=_('User'), ) # Translators: Comment here is a noun and refers to the actual text stored comment = models.TextField(verbose_name=_('Comment')) submit_date = models.DateTimeField( auto_now_add=True, db_index=True, verbose_name=_('Date time submitted') ) def __str__(self): return self.comment def save(self, *args, **kwargs): user = kwargs.pop('_user', None) or self.user is_new = not self.pk super(Comment, self).save(*args, **kwargs) if is_new: if user: event_document_comment_create.commit( actor=user, target=self.document ) else: event_document_comment_create.commit(target=self.document) def delete(self, *args, **kwargs): user = kwargs.pop('_user', None) super(Comment, self).delete(*args, **kwargs) if user: event_document_comment_delete.commit(actor=user, target=self.document) else: event_document_comment_delete.commit(target=self.document) class Meta: get_latest_by = 'submit_date' ordering = ('-submit_date',) verbose_name = _('Comment') verbose_name_plural = _('Comments')