Changelog

0.17 (2023-06-27)

Bugfixes

  • None values are now appropriately sorted first or last (depending on database support. Contributed by @vuongdv-spinshell. (#97)

Improvements

Maintenance

  • Support Python 3.11. (#101)
  • Support Django 4.0, 4.1, and 4.2. (#83, #102)
  • Support Django REST Framework 3.14. (#101)
  • Drop support for Python 3.7. (#102)
  • Drop support for Django 2.2 and 3.1. (#98)
  • Drop support for Django REST Framework < 3.11. (#98)

0.16 (2022-04-01)

Improvements

  • Fix QuerySetSequence’s support with Django REST Framework’s DjangoFilterBackend by accepting a model parameter. If one is not provided, a dummy model is used to provide a reasonable DoesNotExist error. Contributed by @j0nm1. (#88)

Maintenance

0.15 (2021-12-10)

Improvements

  • Support the contains() method. (#85)

Maintenance

  • Support Django 4.0. (#83)
  • Drop support for Django 3.0. (#83)
  • Changed packaging to use setuptools declarative config in setup.cfg. (#84)

0.14 (2021-02-26)

Improvements

  • Support the values() and values_list() methods. (#73, #74)
  • Support the distinct() method when each QuerySet instance is from a unique model. Contributed by @jpic. (#77, #80)
  • Add Sphinx documentation which is available at Read the Docs.

Bugfixes

Maintenance

  • Support Python 3.9. (#78)
  • Support Django 3.2. (#78, #81)
  • Support Django REST Framework 3.12. (#75)
  • Drop support for Python 3.5. (#82)
  • Add an additional test for the interaction of order_by() and only(). (#72)
  • Switch continuous integration to GitHub Actions. (#79)

0.13 (2020-07-27)

Bugfixes

  • explain() now passes through parameters to the underlying QuerySet instances. (#69)
  • Fixes compatibility issue with ModelChoiceField. Contributed by @jpic. (#68)

Maintenance

  • Support Django 3.1. (#69)
  • Drop support for Django < 2.2. (#70)

0.12 (2019-12-20)

Bugfixes

  • Do not use is not to compare to an integer literal. (#61)

Maintenance

  • Support Python 3.8. (#59)
  • Support Django 3.0. (#59)
  • Support Django REST Framework 3.10 and 3.11. (#59, #64)
  • Drop support for Python 2.7. (#59)
  • Drop support for Django 2.0 and 2.1. (#59)

0.11 (2019-04-25)

Improvements

  • Add a QuerySetSequence specific method: get_querysets(). Contributed by @optiz0r. (#53)

Maintenance

0.10 (2018-10-09)

Improvements

  • Support first(), last(), latest(), and earliest() methods. (#40, #49)
  • Support the & and | operators. (#41)
  • Support defer() and only() methods to control which fields are returned. (#44)
  • Support calling using() to switch databases for an entire QuerySetSequence. (#44)
  • Support calling extra()`, ``update(), and annotate() which get applied to each QuerySet. (#46, #47)
  • Support calling explain() on Django >= 2.1. (#48)

Bugfixes

  • Raise NotImplementedError on unimplemented methods. This fixes a regression introduced in 0.9. (#42)
  • Expand tests for empty QuerySet instances. (#43)

0.9 (2018-09-20)

Bugfixes

  • Stop using the internals of QuerySet for better forward compatibility. This change means that QuerySetSequence is no longer a sub-class of QuerySet and should improve interactions with other packages which modify QuerySet. (#38)

Maintenance

  • Support Django 2.0 and 2.1. Contributed by @michael-k. (#35, #39)
  • Support Django REST Framework 3.7 and 3.8. (#33, #39)
  • Drop support for Django < 1.11. (#36)
  • Drop support for Django REST Framework < 3.4. (#36)

0.8 (2017-09-05)

Improvements

  • Optimize iteration when not slicing a QuerySetSequence. Contributed by @EvgeneOskin. (#29)

Maintenance

  • Support Django 1.11. Contributed by @michael-k. (#26, #32)
  • Support Django REST Framework 3.5 and 3.6. (#26)

0.7.2 (2017-04-04)

Bugfixes

  • Calling an unimplemented method with parameters on QuerySetSequence raised a non-sensical error. (#28)

0.7.1 (2017-03-31)

Bugfixes

  • Slicing a QuerySetSequence did not work properly when the slice reduced the QuerySetSequence to a single QuerySet. (#23, #24)
  • Typo fixes. (#19)

Maintenance

  • Support Django REST Framework 3.5. (#20)

0.7 (2016-10-20)

Improvements

  • Allow filtering / querying / ordering by the order of the QuerySets in the QuerySetSequence by using '#'. This allows for additional optimizations when using third-party applications, e.g. Django REST Framework. (#10, #14, #15, #16)
  • Django REST Framework integration: includes a subclass of the CursorPagination from Django REST Framework under queryset_sequence.pagination.SequenceCursorPagination which is designed to work efficiently with a QuerySetSequence by first ordering by internal QuerySet, then by the ordering attribute. (#17)

Bugfixes

  • PartialInheritanceMeta must be provided INHERITED_ATTRS and NOT_IMPLEMENTED_ATTRS. (#12)

Maintenance

  • Move queryset_sequence to an actual module in order to hide some implementation details. (#11)

0.6.1 (2016-08-03)

Maintenance

  • Support Django 1.10. (#9)

0.6 (2016-06-07)

Improvements

  • Allow specifying the Model to use when instantiating a QuerySetSequence. This is required for compatibility with some third-party applications that check the model field for equality, e.g. when using the DjangoFilterBackend with Django REST Framework. Contributed by @CountZachula. (#6)
  • Support prefetch_related. (#7)

Bugfixes

  • Fixes an issue when using Django Debug Toolbar. (#8)

0.5 (2016-02-21)

Improvements

  • Significant performance improvements when ordering the QuerySetSequence. (#5)
  • Support delete() to remove items. (1bb1716)

0.4 (2016-02-03)

Maintenance

  • Support Python 3.4 and 3.5. Contributed by @jpic. (#3)

0.3 (2016-01-29)

Improvements

  • Raises NotImplementedError for QuerySet methods that QuerySetSequence does not implement. (e2c67c5, b376b87)
  • Support reverse() to reverse the item ordering. (f27b2c7)
  • Support none() to return an EmptyQuerySet. (6171c11)
  • Support exists() to check if a QuerySetSequence has any results. (1aa705b)
  • Support select_related to follow foreign-key relationships when generating results. (ad54d5e)

Bugfixes

  • Do not evaluate any QuerySets when calling filter() or exclude() like a Django QuerySet. Contributed by @jpic. (#1, baaf448)
  • Do not cache the results when calling iterator(). (6566a91)

0.2.4 (2016-01-21)

Improvements

  • Support order_by() that references a related model (e.g. a ForeignKey relationship using foo or foo_id syntaxes). (94274d6)
  • Support order_by() that references a field on a related model (e.g. foo__bar) (a97d940)

Maintenance

0.2.3 (2016-01-11)

Bugfixes

  • Fixed calling order_by() with a single field. (5c8521c)

0.2.2 (2016-01-08)

Improvements

  • Support the get() method on QuerySetSequence. (957a650)

0.2.1 (2016-01-08)

Bugfixes

  • Fixed a bug when there’s no data to iterate. (02aafac)

0.2 (2016-01-08)

Bugfixes

  • Do not try to instantiate EmptyQuerySet. (99dba06)

Maintenance

0.1 (2016-01-07)

  • Support Django 1.8.0.
  • Various bug fixes and tests.

The initial commits on based on DjangoSnippets and other code: