使用django-filter进行不区分大小写的排序

Aar*_*ier 6 python django django-filter django-rest-framework

是否可以使用Django-rest-framework进行case-insensitive排序.first_name

这是代码:

import django_filter

class PersonFilter(django_filters.FilterSet):
    class Meta:
        model = Person
        fields = ('first_name_lower',)
        order_by = ('first_name_lower',)

class PersonViewSet(BaseModelViewSet):
    queryset = Person.objects.all()
    permission_classes = (permissions.IsAuthenticated,)
    filter_backends = (filters.DjangoFilterBackend,)
    filter_class = PersonFilter
Run Code Online (Sandbox Code Playgroud)

case-insensitive订购时有简单的方法django-filter吗?

这里 django-filter有不区分大小写搜索的文档,但没有用于排序.

在Django文档中,代码对此有点迟钝,这让我想知道它是否存在django-filter.这里是关于如何使用Django ORM的Django文档代码片段:

>>> from django.db.models.functions import Lower
>>> MyModel.objects.order_by(Lower('myfield'))
Run Code Online (Sandbox Code Playgroud)

Chr*_*aro -1

在 django-rest 列表视图中使用 ordering 和 ordering_fields 参数 - http://www.django-rest-framework.org/api-guide/filtering/#specifying-a-default-ordering

class UserListView(generics.ListAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    filter_backends = (filters.OrderingFilter,)
    ordering_fields = ('username', 'email')
    ordering = ('username',)
Run Code Online (Sandbox Code Playgroud)

  • `ordering_fields` 等...适用于排序,但它*不区分大小写*。Django ORM 默认情况下是“区分大小写”的,上面的“ordering_fields”参数使用“model.objects.order_by”的默认 Django ORM 功能。 (3认同)