在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}}中实现排序的情况下实现吗?
答案 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
。