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

Posted

技术标签:

【中文标题】django rest 框架,order_by 来自 serializers.py 文件的 JSON【英文标题】:django rest framework , order_by a JSON from serializers.py file 【发布时间】:2014-03-02 21:30:12 【问题描述】:

我正在使用 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',)
    )

我有这个 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',)

然后 order_by 不起作用,因为我有这个过滤器, 如何使过滤器与 order_by 一起工作?

【问题讨论】:

【参考方案1】:

有一个简单的方法,只需通过添加一个排序行来明确地覆盖它:

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',)

【讨论】:

如果您想订购嵌套字段怎么办?【参考方案2】:

您不使用序列化程序进行排序。您需要在视图中使用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

【讨论】:

这很好,但是因为我在视图上有一个过滤器,所以这个 order_by 不起作用。 class EstablecimientoViewSet(viewsets.ModelViewSet): queryset = Establecimiento.objects.order_by('nombre') serializer_class= EstablecimientoSerializer filter_backends = (filters.DjangoFilterBackend,) filter_fields = ('categoria','categoria__titulo',) @user3236034 我已经更新了我的帖子,似乎是最简单的方法。 非常感谢,但我没有做到我想要的

以上是关于django rest 框架,order_by 来自 serializers.py 文件的 JSON的主要内容,如果未能解决你的问题,请参考以下文章

Django Rest Framework Api 查看 GET

Django REST ViewSet为Null-able列排序

Django + AngularJS:没有使用普通 URL 和视图的 Django REST 框架的类 REST 端点?

django.test.client 上的 Django rest 框架导入错误

Django REST框架-请求与响应

Django/Django Rest 框架 - 禁用 CSRF