Package: django-queryable-properties
django-queryable-propertiesis aDjangoextension that allows to implement model properties which can be used
in database queries performed via Django’s ORM.Further information, including supported Python and Django versions as well as installation instructions, can be found
in thedocumentation hosted by readthedocs.Contributing and getting helpTheGitHub repositoryis the central place to report bugs and get help using theGitHub issuesas well as to
contribute to the project via pull requests while following theguide on contributing.Changelogmaster (unreleased)1.9.1 (2024-01-09)Fixed resolving of filter conditions of aggregate properties in cases where a property was accessed via relation1.9.0 (2023-12-05)Added support for Django 5.0Added support for Python 3.12Added options to create querysets/managers with queryable property features on demand and without having to define
a manager on the corresponding modelQueryable properties can now be populated in raw queries by using the property name as SQL column name1.8.5 (2023-11-13)Selected queryable properties are no longer aliased with a unique name in queries and use their regular name instead
(also fixes errors that occurred when queries use themselves as subqueries recursively, e.g. in sliced prefetches)1.8.4 (2023-04-05)Added support for Django 4.2Added support for Python 3.111.8.3 (2022-08-06)Added support for Django 4.11.8.2 (2022-06-08)Fixed queryset cloning in conjunction with positional arguments in Django versions below 1.91.8.1 (2022-03-05)Fixed erroneous transformations of querysets with queryable properties functionality into.values()querysets
under rare circumstances in Django versions above 3.0Fixed the ability to pickle.values()/.values_list()querysets with queryable properties functionality in
Django versions below 1.9Fixed the erroneous inclusion of values of queryable properties that are used for ordering without being explicitly
selected in.values()/.values_list()querysets in Django versions below 1.81.8.0 (2021-12-07)Added support for Django 4.0Added new ready-to-use queryable property implementations for properties based on subqueries
(SubqueryFieldProperty,SubqueryExistenceCheckProperty)RelatedExistenceCheckPropertyobjects can now be configured as negated to be able to check for the non-existence
of related objects1.7.1 (2021-11-01)Added support for Python 3.10Fixed duplicate selections ofGROUP BYcolumns when multiple aggregate properties are selected, which also led to
wrong property values, in Django versions below 1.81.7.0 (2021-07-05)Added theprefetch_queryable_propertiesutility function which allows to efficiently query property values for
model instances that were already loaded from the database beforehandExtended theLookupFilterMixinto allow to define a filter function/method that handles all lookups that don’t
use an explicitly registered function/methodValues for queryable properties with setters can now also be set using initializer keyword arguments of their
respective models1.6.1 (2021-04-19)Fixed theAnnotationGetterMixinand its subclasses to be able to work with nested properties correctly regardless
of whether or not the model’s base manager uses the queryable properties extensionsFixed the admin filter that displays all possible options to be able to work with nested properties correctly
regardless of whether or not the model’s default manager uses the queryable properties extensions1.6.0 (2021-04-06)Added support for Django 3.2Queryable properties can now define a verbose name that can be used in UI representationsAdded a Django admin integration that allows to reference queryable properties like regular model fields in various
admin optionsFixed the construction ofGROUP BYclauses when using annotations based on aggregate queryable properties in
Django 1.81.5.0 (2020-12-30)Added an option to implement annotation-based properties that use their annotation to query their getter value from
the databaseAdded a new ready-to-use queryable property implementation for properties that check whether or not certain related
objects exist (RelatedExistenceCheckProperty)Added a new ready-to-use queryable property implementation for properties that map field/attribute values to other
values (MappingProperty)1.4.1 (2020-10-21)String representations of queryable properties do now contain the full Python path instead of the Django model path
(also fixes an error that occurred when building the string representation for a property on an abstract model that
was defined outside of the installed apps)1.4.0 (2020-10-17)ValueCheckPropertyandRangeCheckPropertyobjects can now take more complex attribute paths instead of simple
field/attribute namesRangeCheckPropertyobjects now have an option that determines how to treat missing values to support ranges with
optional boundariesAdded a new ready-to-use queryable property implementation for properties based on simple aggregates
(AggregateProperty)1.3.1 (2020-08-04)Added support for Django 3.1Refactored decorator-based properties to be more maintainable and memory-efficient and documented a way to use them
without actually decorating1.3.0 (2020-05-22)Added an option to implement simplified custom boolean filters utilizing lookup-based filtersFixed the ability to use theclassmethodorstaticmethoddecorators with lookup-based filter methods for
decorator-based propertiesFixed the queryable property resolution inWhenparts of conditional updatesFixed the ability to use conditional expressions directly in.filter/.excludecalls in Django 3.01.2.1 (2019-12-03)Added support for Django 3.01.2.0 (2019-10-21)Added a mixin that allows custom filters for queryable properties (both class- and decorator-based) to be implemented
using multiple functions/methods for different lookupsAdded some ready-to-use queryable property implementations (ValueCheckProperty,RangeCheckProperty) to
simplify common code patternsAdded a standalone version of six to the package requirements1.1.0 (2019-06-23)Queryable property filters (both annotation-based and custom) can now be used across relations when filtering
querysets (i.e. a queryset can now be filtered by a queryable property on a related model)Queryset annotations can now refer to annotatable queryable properties defined on a related modelQuerysets can now be ordered by annotatable queryable properties defined on a related modelFilters and annotations that reference annotatable queryable properties will not select the queryable property
annotation anymore in Django versions below 1.8 (ordering by such a property will still lead to a selection in these
versions)Fixed unnecessary selections of queryable property annotations in querysets that don’t return model instances (i.e.
queries with.values()or.values_list())Fixed unnecessary fields inGROUP BYclauses in querysets that don’t return model instances (i.e. queries with.values()or.values_list()) in Django versions below 1.8Fixed an infinite recursion when constructing theHAVINGclause for annotation-based filters that are not an
aggregate in Django 1.81.0.2 (2019-06-02)Thelookupparameter of custom filter implementations of queryable properties will now receive the combined
lookup string if multiple lookups/transforms are used at once instead of just the first lookup/transformFixed the construction ofGROUP BYclauses when annotating queryable properties based on aggregatesFixed the construction ofHAVINGclauses when annotating queryable properties based on aggregates in Django
versions below 1.9Fixed the ability to pickle queries and querysets with queryable properties functionality in Django versions below
1.61.0.1 (2019-05-11)Added support for Django 2.21.0.0 (2018-12-31)Initial release