+# This manager will be inherited by all subclasses because
+# the core model is abstract.
+class PlCoreBaseDeletionManager(models.Manager):
+ def get_queryset(self):
+ parent=super(PlCoreBaseDeletionManager, self)
+ if hasattr(parent, "get_queryset"):
+ return parent.get_queryset().filter(deleted=True)
+ else:
+ return parent.get_query_set().filter(deleted=True)
+
+ # deprecated in django 1.7 in favor of get_queryset().
+ def get_query_set(self):
+ return self.get_queryset()
+
+# This manager will be inherited by all subclasses because
+# the core model is abstract.
+class PlCoreBaseManager(models.Manager):
+ def get_queryset(self):
+ parent=super(PlCoreBaseManager, self)
+ if hasattr(parent, "get_queryset"):
+ return parent.get_queryset().filter(deleted=False)
+ else:
+ return parent.get_query_set().filter(deleted=False)
+
+ # deprecated in django 1.7 in favor of get_queryset().
+ def get_query_set(self):
+ return self.get_queryset()
+
+class DiffModelMixIn:
+ # Provides useful methods for computing which objects in a model have
+ # changed. Make sure to do self._initial = self._dict in the __init__
+ # method.
+
+ # This is broken out of PlCoreBase into a Mixin so the User model can
+ # also make use of it.