django rest framework,order_by来自serializers.py文件的JSON

use*_*034 12 python django json django-rest-framework

我正在使用django rest框架,我想通过我的json订购我如何使用serializers.py文件中的django rest框架生成一个order_by我在serializers.py中有这个

class EstablecimientoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Establecimiento
        depth = 1
        fields =   ('nombre','ciudad',)
    order_by = (
        ('nombre',)
    )
Run Code Online (Sandbox Code Playgroud)

我有这个order_by,但这对JSON没有任何作用

在serializers.py的JSON中执行此顺序的正确方法是什么?

我有views.py

class EstablecimientoViewSet(viewsets.ModelViewSet):
    queryset = Establecimiento.objects.order_by('nombre')
    serializer_class = EstablecimientoSerializer
    filter_backends = (filters.DjangoFilterBackend,)
    filter_fields = ('categoria','categoria__titulo',)
Run Code Online (Sandbox Code Playgroud)

然后order_by不起作用,因为我有这个过滤器,我怎么做才能使过滤器与order_by一起运行良好?

小智 9

有一种简单的方法,只需通过添加订购行明确覆盖它:

class EstablecimientoViewSet(viewsets.ModelViewSet):
    queryset = Establecimiento.objects
    serializer_class = EstablecimientoSerializer
    filter_backends = (filters.DjangoFilterBackend, filters.OrderingFilter)
    ordering = ('nombre',) #add this line
    filter_fields = ('categoria','categoria__titulo',)
Run Code Online (Sandbox Code Playgroud)

  • 如果您想要订购嵌套字段怎么办? (3认同)

mar*_*dev 1

您不使用序列化器进行排序。您需要queryset在视图中使用属性,如下所示:

class EstablecimientoListView(generics.ListCreateAPIView):
    queryset = Establecimiento.objects.order_by('nombre')
    serializer_class = EstablecimientoSerializer

    def filter_queryset(self, request, queryset, view):
        qs = super(EstablecimientoListView, self).filter_queryset(request, queryset, view)
        qs = qs.order_by('nombre')
        return qs
Run Code Online (Sandbox Code Playgroud)