基于simpleui的高级搜索框

效果展示

image
动态识别每个模型的字段类型,去除了外键搜索,可设置指定的字段和排除字段

当前功能

# -*- encoding: utf-8 -*-
from django.contrib import admin
from apps.users.models import User
from django.db.models import Q

from simpleui.admin import AjaxAdmin
from django.http import HttpRequest, JsonResponse


class BaseAdmin(AjaxAdmin, admin.ModelAdmin):
    '''
    全局模型类
    高级搜索:async_advanced_search
    清除搜索:async_clear_search
    批量修改:async_querysets_update
    批量导入:
    批量导出:
    等功能
	
    def get_queryset(self, request):
        queryset = super().get_queryset(request)
        filter_data = request.session.get('advanced_search')
        if filter_data and self.model._meta.model_name == filter_data['model']:
            queryset = queryset.filter(**filter_data['data'])
        return queryset
		
	    def get_actions(self, request):
        actions = super().get_actions(request)

        actions['async_advanced_search'] = (
            # (function, name, short_description)
            self.async_advanced_search, 'async_advanced_search', '高级搜索'
        )
        actions['async_clear_search'] = (
            # (function, name, short_description)
            self.async_clear_search, 'async_clear_search', '清除搜索'
        )
        actions['async_querysets_update'] = (
            # (function, name, short_description)
            self.async_querysets_update, 'async_querysets_update', '批量更新'
        )
        return actions

由于使用的是session保存搜索条件,因此需要对model_name进行判断,防止其他模型没有该字段报错,同时无法通过页面内的重置按钮重置搜索条件,需另外编写一个重置按钮。

posted @ 2024-06-23 11:17  似雨若漓  阅读(65)  评论(0)    收藏  举报