如何在Django Admin中实现分页和排序

2023-04-11 00:00:00 分页 排序 如何在

在Django Admin中,分页和排序是非常常见的需求,实现起来也比较简单。下面我们就来介绍一下怎么实现。

  1. 分页

在Django Admin中,我们可以使用Paginator类来实现分页功能。以下是实现分页的步骤:

1)在admin.py中导入Paginator类

from django.core.paginator import Paginator

2)在admin类中重写get_queryset()方法,使用Paginator进行分页

class MyModelAdmin(admin.ModelAdmin):
    # 每页显示的数据量
    list_per_page = 10

    def get_queryset(self, request):
        queryset = super().get_queryset(request)
        paginator = Paginator(queryset, self.list_per_page)
        # 获取当前页码,默认为第一页
        page = request.GET.get('page') or 1
        # 获取当前页的数据
        queryset = paginator.get_page(page)
        return queryset
  1. 排序

在Django Admin中,我们可以使用list_display字段来显示列表数据,在这个字段中我们可以设置sortable属性为True来启用排序。以下是实现排序的步骤:

1)在admin类中设置list_display属性,并设置sortable属性为True

class MyModelAdmin(admin.ModelAdmin):
    list_display = ('id', 'title', 'url', 'create_time',)
    list_display_links = ('id', 'title', 'url',)
    ordering = ('-create_time',)
    # 允许排序的字段
    sortable_by = ['id', 'title', 'create_time']

2)在模板文件中使用排序的链接

<th{% if cl.sortable %} class="sortable{% if cl.is_ordered %} {{ cl.order_type }}{% endif %}"{% endif %}>
  {% if cl.sortable %}<a href="{{ cl.get_query_string({ cl.ORDER_VAR: field.order_by_alias }) }}">{% endif %}{{ field.column|capfirst }}{% if cl.sortable %}</a>{% endif %}
</th>

以上代码中,列表头部的每个字段都被包装在了标签内,并根据当前字段是否可排序来为标签添加样式。同时,我们在a标签中使用了Django Admin提供的get_query_string()方法来构建排序的链接。

通过以上两个步骤,我们就可以在Django Admin中实现分页和排序功能了。

相关文章