encode / django-rest-framework

Web APIs for Django. 🎸
https://www.django-rest-framework.org
Other
28.47k stars 6.85k forks source link

Add more functionalities to OrderingFilter #9562

Open maksjood opened 1 month ago

maksjood commented 1 month ago

This is raised from required features for a commercial project I'm working on. We needed to be able to map query param to fields in the queryset. For example, the query parameter is "name" which needs to be mapped to "masked_name" annotation in the queryset.

For each ordering field, we also needed to be able to specify whether null values are considered as high values or low. This is the solution I came up with.

Another feature is that we needed some default orderings to always be applied (for grouping purposes). For example, in a viewset, we add this attribute

ordering_prefixes = ('company_id',)

and when the query is "ordering=name", the final ordering expression would be ('company_id', 'name')