Skip to main content

Django model mixins and utilities

Project description

Django model mixins and utilities.

models.InheritanceCastModel

This abstract base class can be inherited by the root (parent) model in a model-inheritance tree. It allows each model in the tree to “know” what type it is (via an automatically-set foreign key to ContentType), allowing for automatic casting of a parent instance to its proper leaf (child) type.

For instance, if you have a Place model with subclasses Restaurant and Bar, you may want to query all Places:

nearby_places = Place.objects.filter(location='here')

But when you iterate over nearby_places, you’ll get only Place instances back, even for objects that are “really” Restaurant or Bar. If you have Place inherit from InheritanceCastModel, you can just call the cast() method on each Place and it will return an instance of the proper subtype, Restaurant or Bar:

from model_utils.models import InheritanceCastModel

class Place(InheritanceCastModel):
    ...

class Restaurant(Place):
    ...

nearby_places = Place.objects.filter(location='here')
for place in nearby_places:
    restaurant_or_bar = place.cast()
    ...

models.TimeStampedModel

This abstract base class just provides self-updating created and modified fields on any model that inherits it.

managers.QueryManager

Many custom model managers do nothing more than return a QuerySet that is filtered in some way. QueryManager allows you to express this pattern with a minimum of boilerplate:

from django.db import models
from model_utils.managers import QueryManager

class Post(models.Model):
    ...
    published = models.BooleanField()
    pub_date = models.DateField()
    ...

    objects = models.Manager()
    public = QueryManager(published=True).order_by('-pub_date')

The kwargs passed to QueryManager will be passed as-is to the QuerySet.filter() method. You can also pass a Q object to QueryManager to express more complex conditions. Note that you can set the ordering of the QuerySet returned by the QueryManager by chaining a call to .order_by() on the QueryManager (this is not required).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-model-utils-0.3.1.tar.gz (5.6 kB view details)

Uploaded Source

File details

Details for the file django-model-utils-0.3.1.tar.gz.

File metadata

File hashes

Hashes for django-model-utils-0.3.1.tar.gz
Algorithm Hash digest
SHA256 dbf6bbaa44b54e6cc0816e647abbc72dde068aae4e5c4bef6b41a61c9abc7a02
MD5 628d11f9221d1c6262171e75343e06ec
BLAKE2b-256 b8f15dc795ab13b75f2ffdc276c5392ad38504a999adfbdb343ce19f87651454

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page