# 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`, and `deactivate_date` fields.

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 `title` and `description` fields.

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 `created` and `modified` fields.

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`, provides `title` and `description` fields but also provides a self-managed `slug` field 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.