首页 > 解决方案 > 在 get_context_data 中更改查询集后分页不起作用

问题描述

分页工作正常,直到我将reversearg 添加到 QS 以在反向模式下排序查询集。之后分页就坏了。我可以get()在那里使用函数并对其进行分页,但我认为对于这个问题应该是更好的解决方案。谢谢

模型.py:

class Log(models.Model):
    user = models.ForeignKey('auth.User')
    comment = models.CharField()
    date_add = models.DateTimeField()
    class Meta:
        ordering = ['-date_add']

视图.py:

class LogView(ListView):
    model = UserLog
    template_name = 'log.html'
    context_object_name = 'log_list'
    paginate_by = 13

    def get_queryset(self):
        return Log.objects.filter(user=self.request.user).all()

    def get_context_data(self, *, object_list=None, **kwargs):
        context = super(LogView, self).get_context_data(**kwargs)
        if 'reverse' in self.request.GET:
            context['log_list'] = Log.objects.filter(user=self.request.user).all().order_by('date_add')
        return context

标签: pythondjango

解决方案


将运行查询集的代码移动到get_queryset,以便它在查询集分页之前运行。

def get_queryset(self):
    queryset = Log.objects.filter(user=self.request.user).all()
    if 'reverse' in self.request.GET:
        queryset = queryset.order_by('date_add')
    return queryset

推荐阅读