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 端点?