Filter model properties in get_default_valid_fields of OrderingFilter

This commit is contained in:
Ömer Faruk Abacı 2021-03-11 13:40:05 +03:00
parent 62113a794a
commit c7f8b1456a

View File

@ -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
)
]