优化代码class FileManager_listview(ListView): """利用django的五大视图中的ListView来显示数据 同时添加了排序功能 """ # 查询模型 model = FileManager # 指定模型为UserInfo # TODO 待完善 extra_context待实验 # 设置模型外的数据 # extra_context = {'title': '人员信息表'} # 获取并判断搜索条件 # 设置模版文件 template_name = 'zadmin/pages/File_Manager.html' # 指定模板 # 设置模板上下文,即为模板变量进行命名 context_object_name = 'files' # 指定在模板中使用的变量为customers # 每页的展示多少条数据 paginate_by = 10 # 注意下面一行, 获取智能页码范围,并传递给模板 # page_range = paginator.get_elided_page_range(page, on_each_side=3, on_ends=2) # 可以自定义查询集 # TODO 应该是可以指定一个数据库中的部分数据吧 # queryset = UserInfo.objects.all() # 重写get_queryset方法,对数据进行过滤排序 def get_queryset(self): """ 查询 :return: """ queryset = super().get_queryset() mywhere = [] order_by = self.request.GET.get('order_by', None) search_keyword = self.request.GET.get("search", None) # Q就是或 if search_keyword: # 构造查询条件 kwlist = Q(username__contains=search_keyword) | Q(realname__contains=search_keyword) | Q( phone__contains=search_keyword) # # 保持搜索条件 # mywhere.append('search=' + search_keyword) # 将搜索参数存储在Session中 self.request.session['search_keyword'] = search_keyword messages.success(self.request, '搜索结果') else: # 清除Session中的搜索参数 self.request.session.pop('search_query', None) # return queryset.filter(kwlist) return queryset
时间: 2024-02-14 09:29:16 浏览: 109
下面是优化后的 `FileManager_listview` 类视图的代码:
```python
from django.views.generic import ListView
from django.contrib import messages
from django.db.models import Q
from .models import FileManager
class FileManagerListView(ListView):
model = FileManager
template_name = 'zadmin/pages/File_Manager.html'
context_object_name = 'files'
paginate_by = 10
def get_queryset(self):
queryset = super().get_queryset()
order_by = self.request.GET.get('order_by')
search_keyword = self.request.GET.get("search")
if search_keyword:
queryset = queryset.filter(
Q(username__contains=search_keyword) |
Q(realname__contains=search_keyword) |
Q(phone__contains=search_keyword)
)
self.request.session['search_keyword'] = search_keyword
messages.success(self.request, '搜索结果')
else:
self.request.session.pop('search_keyword', None)
if order_by:
queryset = queryset.order_by(order_by)
return queryset
```
优化后的代码主要做了以下几点改进:
1. 使用适当的命名规范,将类名从 `FileManager_listview` 改为 `FileManagerListView`。
2. 移除了不必要的注释。
3. 使用 `ListView` 类作为基类,简化了代码。
4. 重写了 `get_queryset` 方法,实现了搜索功能和排序功能。
5. 使用 `Q` 对象进行多条件的模糊查询。
6. 使用 `messages` 模块显示搜索结果的消息。
7. 在处理搜索条件时,将搜索关键字存储在会话中,以便在模板中使用。
8. 在处理排序条件时,根据 `order_by` 参数对查询集进行排序。
请确保在你的Django应用程序中正确导入 `ListView`、`messages`、`Q` 和 `FileManager` 模型,并根据你的实际需求进行适当的调整。
希望这个优化后的代码对你有帮助!如果还有其他问题,请随时提问。
阅读全文