+mark_canceled = django.dispatch.Signal(providing_args=['instance'])
+
+class CancelableContent(models.Model):
+ canceled = models.BooleanField(default=False)
+
+ def cancel(self):
+ if not self.canceled:
+ self.canceled = True
+ self.save()
+ mark_canceled.send(sender=self.__class__, instance=self)
+ return True
+
+ return False
+
+ class Meta:
+ abstract = True
+ app_label = 'forum'
+