擅长:python、mysql、java
<p>您可能希望将<code>OrderingFilter</code>子类化,并将其用作您的<code>filter_backend</code>,以便可以重用代码。在</p>
<pre><code>from rest_framework.filters import OrderingFilter
from django.db.models.functions import Lower
class CaseInsensitiveOrderingFilter(OrderingFilter):
def filter_queryset(self, request, queryset, view):
ordering = self.get_ordering(request, queryset, view)
if ordering is not None:
if ordering.startswith('-'):
queryset = queryset.order_by(Lower(ordering[1:])).reverse()
else:
queryset = queryset.order_by(Lower(ordering))
return queryset
class PersonViewSet(ModelViewSet):
queryset = Person.objects.all()
serializer_class = MySerializer
permission_classes = (permissions.IsAuthenticated,)
filter_backends = (CaseInsensitiveOrderingFilter,)
</code></pre>