Используйте str.split()
для разделения параметров URL
class EndlessPagination(CursorPagination):
ordering_param = 'order_by'
def set_ordering_param(self, request):
<b>ordering_param_list = request.query_params.get(self.ordering_param, None)
self.ordering = ordering_param_list.split(',')
# here, "self.ordering" will be a "list", so, you should update the validation logic</b>
"""
if not self.ordering:
raise ValueError('Url must contain a parameter named ' +
self.ordering_param)
if self.ordering.startswith("\"") or self.ordering.endswith("\""):
raise ValueError('Ordering parameter should not include quotation marks'
"""
def paginate_queryset(self, queryset, request, view=None):
# This function is designed to set sorting param right in the URL
self.set_ordering_param(request)
return super(EndlessPagination, self).paginate_queryset(queryset, request, view)
Примеры URL
1. my_url/sms/270380?order_by=-timestamp
2. my_url/sms/270380?order_by=-timestamp,name
3. my_url/sms/270380?order_by=-name,foo,-bar
ОБНОВЛЕНИЕ-1
Прежде всего, спасибо вам за предоставленную возможность глубоко копать:)
Как вы сказали, я тоже не видел разделенных запятыми query_params в популярных API .Итак, измените формат URL на что-то вроде
my_url/sms/270380?<b>?order_by=-name&order_by=foo&order_by=-bar</b>
. В это время
request.query_params['order_by']
будет список, равный
['-name','foo','-bar']
.Таким образом, вы не хотите использовать функцию
split()
, следовательно, ваш метод
set_ordering_param()
становится,
def set_ordering_param(self, request):
<b>self.ordering = request.query_params.get(self.ordering_param, None)</b>
#...... your other validations