Model Extensions
- synopsis:
Model Extensions
Introduction
Django Extensions provides you a set of Abstract Base Classes for models that implements commonly used patterns like holding the model’s creation and last modification dates.
Database Model Extensions
ActivatorModel - Abstract Base Class that provides a
status,activate_date, anddeactivate_datefields.
The status field is an IntegerField whose value is chosen from a tuple
of choices - active and inactive - defaulting to active. This model also
exposes a custom manager, allowing the user to easily query for active or
inactive objects.
E.g.: Model.objects.active() returns all instances of Model that have an
active status.
TitleDescriptionModel - This Abstract Base Class model provides
titleanddescriptionfields.
The title field is CharField with a maximum length of 255 characters,
non-nullable. description. On the other hand, description is a
nullable TextField.
TimeStampedModel - An Abstract Base Class model that provides self-managed
createdandmodifiedfields.
Both of the fields are customly defined in Django Extensions as
CreationDateTimeField and ModificationDateTimeField.
Those fields are subclasses of Django’s DateTimeField and will store
the value of django.utils.timezone.now() on the model’s creation
and modification, respectively
TitleSlugDescriptionModel - An Abstract Base Class model that, like the
TitleDescriptionModel, providestitleanddescriptionfields but also provides a self-managedslugfield which populates from the title.
That field’s class is a custom defined AutoSlugField, based on Django’s
SlugField. By default, it uses - as a separator, is unique and does
not accept blank values.
It is possible to customize slugify_function
by defining your custom function within a model:
# models.py
from django.db import models
from django_extensions.db.models import TitleSlugDescriptionModel
class MyModel(TitleSlugDescriptionModel, models.Model):
def slugify_function(self, content):
"""
This function will be used to slugify
the title (default `populate_from` field)
"""
return content.replace('_', '-').lower()
See AutoSlugField docs for more details.