How it works...
The CreationModificationDateMixin class is an abstract model, which means that extending model classes will create all of the fields in the same database table—that is, there will be no one-to-one relationships that make the table difficult to handle. This mixin has two date-time fields, each set to receive the date and time when the object is saved. For the created field, the current date-time is only set on the initial save, when the related item is added, by setting the auto_now_add flag to True. Similarly, the modified field is set on every save, via auto_now=True. Because these field values are handled automatically, Django marks them as read-only for us, so that we don't have to specify the editable=False flag ourselves.
To make use of this mixin, we just have to import it and extend our model, as follows:
# demo_app/models.py
# ...
from utils.models import (CreationModificationDateMixin, UrlMixin)
class Idea(CreationModificationDateMixin, UrlMixin):
# ...