在django rest框架中重命名RelatedField排序过滤器

时间:2017-05-02 14:48:43

标签: django django-rest-framework

在django rest框架APIView中,我们使用与search filters相同的方法指定排序字段,因此我们可以使用相关名称指定排序。

ordering_fields = ('username', 'email', 'profile__profession')

路线如下所示:https://example.com/route?ordering=profile__profession

但是我们宁愿避免在api中显示模型之间的关系,然后指定profession而不是profile__profession。例如https://example.com/route?ordering=profession

这可以在不必在APIView def get_queryset(self): {/ 1}}中实现排序的情况下实现吗?

2 个答案:

答案 0 :(得分:2)

可以通过def get_queryset(self)的微小变化来实现。

def get_queryset(self):
    query = super(UserListView, self).get_queryset().annotate(profession=F('profile__profession'))
    return query

答案 1 :(得分:1)

您需要通过覆盖OrderingFilter并使用字典将“短名称”映射到完整的查询集字符串,基于Django REST框架编写自己的get_ordering