Django Rest框架分页 - 默认返回最后一页

时间:2017-07-17 08:48:44

标签: python django pagination django-rest-framework

我正在使用django rest框架来处理聊天应用程序以返回消息列表。

这些是我在api.py中的代码

class MessageList(generics.ListAPIView):
    queryset = Message.objects.all()
    serializer_class = MessageSerializer
    pagination_class = MessagePagination

    def get_queryset(self):
        queryset = super(MessageList, self).get_queryset()
        return queryset.filter(room__id=self.kwargs.get('pk')).order_by('id')

使用http://localhost:8000/chats/message-list/[room_pk]/?page= ?,我能够在不同的页面中获取我想要的消息列表。

但是,我希望默认返回最后一页,因为我也将在稍后实现js无限滚动。换句话说,通过输入网址http://localhost:8000/chats/message-list/[room_pk]/,将返回最后一页对象。

我在django休息框架中相当新,所以我非常感谢任何帮助。提前谢谢。

2 个答案:

答案 0 :(得分:0)

您可以使用以下内容获得所需的数据/结果。

return queryset.filter(room__id=self.kwargs.get('pk')).order_by('-i‌​d')

知道-任何字段都可以改变排序顺序,不管是字母(字符串)还是数字(int)。快乐的Python给你!

答案 1 :(得分:0)

如果您只需要查看最新的对象,则可以考虑覆盖模型的ordering属性。

class Message(models.Model):
    ....
    ....

    class Meta:
        ordering = ('-id', )

通过设置Meta属性ordering,您隐式默认此模型的所有查询集以返回最新创建的对象。这样您就不必为相同的功能编写不必要的代码。

PS:不要忘记makemigrationsmigrate