Skip to main content

Polymorphic models based on django deferred models

Project description


django_deferred_polymorph is an implementation of polymorphic models for Django. Like other solutions you can just fetch the base instance from your database and get the right subclass back. This means you always can rely on having all data/methods your child class would provide.

Unlike other solutions additional data is loaded by using a slightly modified version of Django’s own deferered mechanisms. This way getting the base classes issues only one SQL query, returning the subclasses with all additional data as defered field. If you attempt to access one of the deferred fields all deferred fields are loaded (unlike for Django’s default deferred fields).

django_deferred_polymorph includes two abstract base models:

  • DeferredPolymorphBaseModel as the base for every deferred model
  • SubDeferredPolymorphBaseModel which extends DeferredPolymorphBaseModel to force userd to use a subclass



pip install django_deferred_polymorph

Then add 'django_deferred_polymorph' to your INSTALLED_APPS settings.

Running tests

First create a virtualenv, then install package inside the virtualenv and add the test dependencies with:

python develop
pip install -r requirements.txt

Now you can run the test suite against the currently installed version of Django with:


However we support multiple versions of Django and Python. To test all relevant combinations at once you can use the following command:




  • Reuse registered apps so object deletion works
  • Dropped compatibility with Django < 1.7


  • Fix for Django 1.8 that did not set _base_manager correctly for subclasses of DeferredPolymorphBaseModel. That broke the Model.delete() method in some cases.


  • Adding file to define which files get included in the source distribution. CHANGES.rst was missing from that and caused an error on install.


  • Dropping support for Django 1.5.x and lower as we had to adept to Django’s naming scheme for get_queryset instead of get_query_set in managers.
  • Fix for Django 1.8 which uses unicode for model names in the Meta._meta object. That broke the dynamic class creation with type().


  • Django 1.8 support.

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_deferred_polymorph-0.4.0.tar.gz (7.7 kB view hashes)

Uploaded source

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page