如何在Django Admin中实现分页和排序
在Django Admin中,分页和排序是非常常见的需求,实现起来也比较简单。下面我们就来介绍一下怎么实现。
- 分页
在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
- 排序
在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>
以上代码中,列表头部的每个字段都被包装在了
通过以上两个步骤,我们就可以在Django Admin中实现分页和排序功能了。
相关文章