Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jazzband/django-polymorphic
Improved Django model inheritance with automatic downcasting
https://github.com/jazzband/django-polymorphic
django django-admin django-formsets django-orm
Last synced: 25 days ago
JSON representation
Improved Django model inheritance with automatic downcasting
- Host: GitHub
- URL: https://github.com/jazzband/django-polymorphic
- Owner: jazzband
- License: other
- Created: 2011-02-12T23:30:34.000Z (over 13 years ago)
- Default Branch: master
- Last Pushed: 2024-04-29T17:45:33.000Z (6 months ago)
- Last Synced: 2024-05-01T18:30:53.087Z (6 months ago)
- Topics: django, django-admin, django-formsets, django-orm
- Language: Python
- Homepage: https://django-polymorphic.readthedocs.io
- Size: 1.38 MB
- Stars: 1,574
- Watchers: 32
- Forks: 272
- Open Issues: 170
-
Metadata Files:
- Readme: README.rst
- Contributing: CONTRIBUTING.rst
- License: LICENSE
- Authors: AUTHORS.rst
Awesome Lists containing this project
- best-of-web-python - GitHub - 45% open · ⏱️ 04.06.2024): (Django Utilities)
README
.. list-table::
:header-rows: 0
:widths: auto* - .. image:: https://github.com/jazzband/django-polymorphic/actions/workflows/test.yml/badge.svg
:target: https://github.com/jazzband/django-polymorphic/actions/workflows/test.yml
- .. image:: https://img.shields.io/pypi/v/django-polymorphic.svg
:target: https://pypi.python.org/pypi/django-polymorphic/
- .. image:: https://img.shields.io/codecov/c/github/jazzband/django-polymorphic/master.svg
:target: https://codecov.io/github/jazzband/django-polymorphic?branch=master
- .. image:: https://readthedocs.org/projects/django-polymorphic/badge/?version=stable
:target: https://django-polymorphic.readthedocs.io/en/stable/
- .. image:: https://jazzband.co/static/img/badge.svg
:target: https://jazzband.co/
:alt: JazzbandPolymorphic 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...
.. code-block:: python
>>> 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!
.. code-block:: python
>>> Project.objects.all()
[ ,
,
]Using vanilla Django, we get the base class objects, which is rarely what we wanted:
.. code-block:: python
>>> Project.objects.all()
[ ,
,
]This also works when the polymorphic model is accessed via
ForeignKeys, ManyToManyFields or OneToOneFields.Features
--------* Full admin integration.
* 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 minimum amount of queries needed to fetch the inherited models.
* Disabling polymorphic behavior when needed.**Note:** 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!The current release of *django-polymorphic* supports Django 2.2 - 4.0 on Python 3.6+.
For more information, see the `documentation at Read the Docs `_.
Installation
------------Install using ``pip``\ ...
.. code:: bash
$ pip install django-polymorphic
At the moment we have an unoffical version (4.0.0a). While we wait to gain access to pip. If you want to use the latest version (which works for Django >4.0.0). You can install it using
.. code:: bash
pip install git+https://github.com/jazzband/[email protected]#egg=django-polymorphic
License
=======Django-polymorphic uses the same license as Django (BSD-like).