From c7f8b1456adb9cda56096b4a13bec94efadf0fbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20Faruk=20Abac=C4=B1?= Date: Thu, 11 Mar 2021 13:40:05 +0300 Subject: [PATCH] Filter model properties in get_default_valid_fields of OrderingFilter --- rest_framework/filters.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/rest_framework/filters.py b/rest_framework/filters.py index e2aad4272..1ffd9edc0 100644 --- a/rest_framework/filters.py +++ b/rest_framework/filters.py @@ -226,16 +226,19 @@ class OrderingFilter(BaseFilterBackend): ) raise ImproperlyConfigured(msg % self.__class__.__name__) - model_field_names = [field.name for field in queryset.model._meta.fields] + model_class = queryset.model + model_property_names = [ + # 'pk' is a property added in Django's Model class, however it is valid for ordering. + attr for attr in dir(model_class) if isinstance(getattr(model_class, attr), property) and attr != 'pk' + ] return [ (field.source.replace('.', '__') or field_name, field.label) for field_name, field in serializer_class(context=context).fields.items() if ( not getattr(field, 'write_only', False) and - not field.source == '*' and ( - field_name in model_field_names or field.source in model_field_names - ) + not field.source == '*' and + field.source not in model_property_names ) ]