Skip to content


All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.



  • Add support for Django 4.1
  • Drop support for Django 2.2

[2.0.0] - 2022-07-19


  • BACKWARDS INCOMPATIBLE: The default value of the distinct argument for the pairs.count and pairs.has functions has changed from True to False. This now matches the default value of the distinct arguments to Django's Count annotation. To retain current behaviour, add distinct=True to all calls to these two functions in your codebase. For background on this decision, see this discussion.


  • Proper documentation!
  • New pairs.annotate function allowing you to annotate a queryset with aggregates, functions etc and produce the result.
  • New pairs.sum function to annotate a queryset with the Sum aggregate function and produce the result.

[1.1.0] - 2022-02-23


  • New pairs.discard_queryset_function and pairs.discard_projector functions to discard one or other item in a reader pair.


  • SpecMixin now applies prepare function in get_queryset, not filter_queryset

[1.0.0] - 2021-10-13

Initial stable release.