Go to file
Diederik van der Boor f17493ebb9 Merge pull request #35 from fusionbox/django1.6
Another fix for Django 1.6 support

This addresses the removal of CHUNK_SIZE due to https://code.djangoproject.com/ticket/18702 in django/django@70679243d1
2013-05-25 05:07:23 -07:00
docs Increase version and add django 1.6 support to the changelog 2013-05-24 15:37:01 -06:00
example Apply list filter in example app 2013-04-08 00:37:51 +02:00
polymorphic Increase version and add django 1.6 support to the changelog 2013-05-24 15:37:01 -06:00
.gitignore Applied an overal cleanup of the .gitignore file 2013-04-08 11:30:50 +02:00
.travis.yml Run travis tests on django dev 2013-05-24 15:13:57 -06:00
AUTHORS.rst Port documentation to Sphinx, cleanup README 2013-05-19 17:15:41 +02:00
LICENSE updated docs, and moved them to DOCS.rst and README.rst 2010-01-26 14:28:22 +01:00
MANIFEST.in Include templates in install. 2012-12-10 18:02:12 +01:00
README.rst Update Travis image in README 2013-05-20 18:02:54 +02:00
runtests.py Add runtests script 2013-04-05 09:52:53 +02:00
setup.py Setup.py: update trove classifiers, read version from code. 2013-05-20 17:12:38 +02:00
tox.ini Python 3.2 support confirmed. 2013-05-20 17:34:09 +02:00

README.rst

.. image::  https://travis-ci.org/chrisglass/django_polymorphic.png?branch=master
  :target: http://travis-ci.org/chrisglass/django_polymorphic
  :alt: build-status

Polymorphic Models for Django
=============================

Django-polymorphic simplifies using inherited models in Django projects.
When a query is made at the base model, the inherited model classes are returned.

When we store models that inherit from a ``Project`` model...

>>> Project.objects.create(topic="Department Party")
>>> ArtProject.objects.create(topic="Painting with Tim", artist="T. Turner")
>>> ResearchProject.objects.create(topic="Swallow Aerodynamics", supervisor="Dr. Winter")

...and want to retrieve all our projects, the subclassed models are returned!

>>> Project.objects.all()
    [ <Project:         id 1, topic "Department Party">,
      <ArtProject:      id 2, topic "Painting with Tim", artist "T. Turner">,
      <ResearchProject: id 3, topic "Swallow Aerodynamics", supervisor "Dr. Winter"> ]

Using vanilla Django, we get the base class objects, which is rarely what we wanted:

>>> Project.objects.all()
    [ <Project: id 1, topic "Department Party">,
      <Project: id 2, topic "Painting with Tim">,
      <Project: id 3, topic "Swallow Aerodynamics"> ]

This also works when the polymorphic model is accessed via
ForeignKeys, ManyToManyFields or OneToOneFields.

Features
--------

* Full admin integation.
* ORM integration:

 * support for ForeignKey, ManyToManyField, OneToOneField descriptors.
 * Filtering/ordering of inherited models (``ArtProject___artist``).
 * Filtering model types: ``instance_of(...)`` and ``not_instance_of(...)``
 * Combining querysets of different models (``qs3 = qs1 | qs2``)
 * Support for custom user-defined managers.

* Uses the minumum amount of queries needed to fetch the inherited models.
* Disabling polymorphic behavior when needed.

While *django-polymorphic* makes subclassed models easy to use in Django,
we still encourage to use them with caution. Each subclassed model will require
Django to perform an ``INNER JOIN`` to fetch the model fields from the database.
While taking this in mind, there are valid reasons for using subclassed models.
That's what this library is designed for!

For more information, see the `documentation at Read the Docs <https://django-polymorphic.readthedocs.org/>`_.

License
=======

Django-polymorphic uses the same license as Django (BSD-like).