Chain multiple (disparate) QuerySets in Django
ISC License
Django QuerySetSequence #######################
.. image:: https://img.shields.io/pypi/v/django-querysetsequence.svg :target: https://pypi.org/project/django-querysetsequence/
.. image:: https://github.com/clokep/django-querysetsequence/actions/workflows/main.yml/badge.svg :target: https://github.com/clokep/django-querysetsequence/actions/workflows/main.yml
.. image:: https://readthedocs.org/projects/django-querysetsequence/badge/?version=latest :target: https://django-querysetsequence.readthedocs.io/en/latest/?badge=latest :alt: Documentation Status
.. include-start
django-querysetsequence adds helpers for treating multiple disparate QuerySet
obejcts as a single QuerySet
. This is useful for passing into APIs that only
accepted a single QuerySet
.
The QuerySetSequence
wrapper is used to combine multiple QuerySet
instances.
QuerySetSequence
aims to provide the same behavior as Django's |QuerySets|_,
but applied across multiple QuerySet
instances.
.. |QuerySets| replace:: QuerySets
.. _QuerySets: https://docs.djangoproject.com/en/dev/ref/models/querysets/
Supported features:
filter()
, exclude()
,get()
, order_by()
) must use fields that are common across allQuerySets
.'foo__bar'
, 'foo'
, or'foo_id'
). syntax).QuerySets
are evaluated as late as possible (e.g. duringrepr()
/len()
/list()
/bool()
QuerySet
API methods that are untested/unimplemented raiseNotImplementedError
.Install the package using pip.
.. code-block:: bash
pip install --upgrade django-querysetsequence
.. code-block:: python
# Import QuerySetSequence
from queryset_sequence import QuerySetSequence
# Create QuerySets you want to chain.
from .models import SomeModel, OtherModel
# Chain them together.
query = QuerySetSequence(SomeModel.objects.all(), OtherModel.objects.all())
# Use query as if it were a QuerySet! E.g. in a ListView.
django-querysetsequence is released under the ISC license, its documentation lives
on Read the Docs
, the code on GitHub
, and the latest release on PyPI
. It
supports Python 3.7+, Django 3.2/4.0/4.1/4.2, and is optionally compatible with
Django REST Framework
3.11+.
.. _Read the Docs: https://django-querysetsequence.readthedocs.io/ .. _GitHub: https://github.com/clokep/django-querysetsequence .. _PyPI: https://pypi.org/project/django-querysetsequence/ .. _Django REST Framework: http://www.django-rest-framework.org/
Some ways that you can contribute: