Fix: not working rename with ('name', 'origin name') pattern

This commit is contained in:
ali 2023-06-28 18:52:23 +03:30
parent 8dd4250d02
commit ed112a1b83

View File

@ -4,14 +4,13 @@ returned by list views.
""" """
import operator import operator
import warnings import warnings
from functools import reduce
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
from django.db import models from django.db import models
from django.db.models.constants import LOOKUP_SEP from django.db.models.constants import LOOKUP_SEP
from django.template import loader from django.template import loader
from django.utils.encoding import force_str from django.utils.encoding import force_str
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from functools import reduce
from rest_framework import RemovedInDRF317Warning from rest_framework import RemovedInDRF317Warning
from rest_framework.compat import coreapi, coreschema, distinct from rest_framework.compat import coreapi, coreschema, distinct
@ -198,13 +197,25 @@ class OrderingFilter(BaseFilterBackend):
params = request.query_params.get(self.ordering_param) params = request.query_params.get(self.ordering_param)
if params: if params:
fields = [param.strip() for param in params.split(',')] fields = [param.strip() for param in params.split(',')]
ordering = self.remove_invalid_fields(queryset, fields, view, request) valid_filed_names = self.remove_invalid_fields(queryset, fields, view, request)
ordering = self.convert_to_origin_filed_name(request, queryset, view, valid_filed_names)
if ordering: if ordering:
return ordering return ordering
# No ordering was included, or all the ordering fields were invalid # No ordering was included, or all the ordering fields were invalid
return self.get_default_ordering(view) return self.get_default_ordering(view)
def convert_to_origin_filed_name(self, request, queryset, view, ordering):
valid_fields = dict(self.get_valid_fields(queryset, view, {'request': request}))
converted_fields = []
for field in ordering:
if field.startswith('-'):
converted_fields.append('-' + valid_fields[field[1:]])
else:
converted_fields.append(valid_fields[field])
return converted_fields
def get_default_ordering(self, view): def get_default_ordering(self, view):
ordering = getattr(view, 'ordering', None) ordering = getattr(view, 'ordering', None)
if isinstance(ordering, str): if isinstance(ordering, str):