Python 如何使用过滤查询集处理通用ListView分页?

Python 如何使用过滤查询集处理通用ListView分页?,python,django,Python,Django,代码: 我有一个视图,其中列出了用户添加到表中的内容。问题是分页工作不正常。我认为这是因为每次django呈现页面时,它都会再次过滤queryset,导致只列出前10项。如何处理这个问题?或者我不应该使用通用视图来做这样的事情 模板: class MyObjects(LoginRequiredMixin, ListView): model = AllObjects template_name = "my_objects.html" paginate_by = 10

代码:

我有一个视图,其中列出了用户添加到表中的内容。问题是分页工作不正常。我认为这是因为每次django呈现页面时,它都会再次过滤queryset,导致只列出前10项。如何处理这个问题?或者我不应该使用通用视图来做这样的事情

模板:

class MyObjects(LoginRequiredMixin, ListView):
    model = AllObjects
    template_name = "my_objects.html"
    paginate_by = 10

    def get_queryset(self, *args, **kwargs):
        queryset = super(MyObjects, self).get_queryset()
        return queryset.filter(added_by=self.request.user).order_by('-last_modified')

{对象_列表%中的对象为%j}
{{obj.name}
{%endfor%}
  • {page_obj.paginator.page_range%}{%if page==page_obj.number%}
  • {%else%}
  • {%endif%}{%endfor%}

我发现了我的错误。在我的模板中,我使用了链接“?sayfa={{page}”。(“sayfa”在土耳其语中的意思是页面,所以它是本地化版本)这是我以前使用基于函数的视图进行分页时留下的。一种修复方法是将所有“sayfa”更改为“page”,但由于这对于本地化目的来说并不太好,因此在我的视图中添加
page\u kwarg=“sayfa”
可以修复此问题。谢谢你的回答

如果要列出更多项目,请将
paginate_增加
,如果要在模板中看到其他项目,则必须从一个页面切换到另一个页面。筛选功能不会影响Django的分页能力。分页是在调用
get_queryset()
方法后应用的,方法为。因此,您的
MyObjects
view类看起来应该可以工作。你能给我们看一下模板吗?我添加了模板。如果筛选器没有影响任何内容,那么问题一定在模板中?您的分页对象是
object\u list
not
page\u obj
<table>
  {% for obj in object_list %}
  <tr>
    <td>
      {{ obj.name}}
    </td>
  </tr>
  {% endfor %}
</table>

<nav aria-label="Page navigation">
  <ul class="pagination">
    <li class="page-item {% if not page_obj.has_previous %}disabled{%endif%}">
      <a class="page-link" {% if page_obj.has_previous %} href="?sayfa={{ page_obj.previous_page_number }}" {% endif %} aria-label="Previous">
            <span aria-hidden="true">&laquo;</span>
          </a>
    </li>
    {% for page in page_obj.paginator.page_range %} {% if page == page_obj.number %}
    <li class="page-item active"><a class="page-link" href="#">{{ page }}</a></li>
    {% else %}
    <li class="page-item"><a class="page-link" href="?sayfa={{ page }}">{{ page }}</a></li>
    {% endif %} {% endfor %}
    <li class="page-item {% if not page_obj.has_next %}disabled{%endif%}">
      <a class="page-link" {% if page_obj.has_next %}href="?sayfa={{ page_obj.next_page_number }}" {% endif %} aria-label="Next">
            <span aria-hidden="true">&raquo;</span>
          </a>
    </li>
  </ul>
</nav>