mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-07-18 04:02:35 +03:00
Fix: not working rename with ('name', 'origin name') pattern
This commit is contained in:
parent
8dd4250d02
commit
ed112a1b83
|
@ -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):
|
||||||
|
|
Loading…
Reference in New Issue
Block a user