from django.db import models from extras.models import ObjectChange from utilities.utils import serialize_object __all__ = ( 'ChangeLoggedModel', ) class ChangeLoggedModel(models.Model): """ An abstract model which adds fields to store the creation and last-updated times for an object. Both fields can be null to facilitate adding these fields to existing instances via a database migration. """ created = models.DateField( auto_now_add=True, blank=True, null=True ) last_updated = models.DateTimeField( auto_now=True, blank=True, null=True ) class Meta: abstract = True def to_objectchange(self, action): """ Return a new ObjectChange representing a change made to this object. This will typically be called automatically by extras.middleware.ChangeLoggingMiddleware. """ return ObjectChange( changed_object=self, object_repr=str(self), action=action, object_data=serialize_object(self) )