您现在的位置是: 网站首页 >Django >DjangoCRM客户关系管理 Django
【CRM客户关系管理】21.action功能开发,默认action,生成自己的action
admin2018年12月23日 15:54 【Django | JavaScript | JQuery | Python 】 1255人已围观
DjangoCRM客户关系管理简介 使用Django2.1.3+Bootstrap实现CRM系统,仿照Django Admin重写后台 Github地址:https://github.com/xyliurui/DjangoCRM Django版本:2.1.3
### DjangoAdmin后台增加actions功能 ![BLOG_20181223_155528_57](/media/blog/images/2018/12/BLOG_20181223_155528_57.png "博客图集BLOG_20181223_155528_57.png") Django admin默认的执行,选中后,可以通过执行批量删除,也可以自定义一个函数去执行批量操作 修改crm/admin.py文件,增加`CustomerInfoAdmin(admin.ModelAdmin)`类的`actions` ```python class CustomerInfoAdmin(admin.ModelAdmin): list_display = ['name', 'contact_type', 'contact', 'consultant', 'consult_content', 'status', 'created_time'] list_filter = ['source', 'consultant', 'status', 'created_time'] search_fields = ['contact', 'consultant__name', 'consult_content'] readonly_fields = ['contact', 'status'] filter_horizontal = ['consult_courses'] actions = ['change_status'] def change_status(self, request, queryset): queryset.update(status=3) # 批量设置可装状态为“结业” change_status.short_description = '客户状态修改为结业' # 设置后台可见描述 admin.site.register(CustomerInfo, CustomerInfoAdmin) ``` ![BLOG_20181223_155548_54](/media/blog/images/2018/12/BLOG_20181223_155548_54.png "博客图集BLOG_20181223_155548_54.png") ![BLOG_20181223_155604_41](/media/blog/images/2018/12/BLOG_20181223_155604_41.png "博客图集BLOG_20181223_155604_41.png") 选中后执行,就会把所有的状态修改为结业。 ### djadmin actions功能 #### 父类BaseDjAdmin增加actions属性 修改djadmin/djadmin_base.py ```python # djadmin/djadmin_base.py class BaseDjAdmin(object): list_display = [] list_filter = [] search_fields = [] readonly_fields = [] filter_horizontal = [] list_per_page = 5 actions = [] ``` #### 自定义crm的djadmin 可以直接将admin.py的属性和方法复制过来 ```python class CustomerInfoAdmin(BaseDjAdmin): # 不使用object,直接继承BaseDjAdmin list_display = ['name', 'contact_type', 'contact', 'consultant', 'consult_content', 'status', 'created_time'] list_filter = ['source', 'consultant', 'status', 'created_time'] search_fields = ['contact', 'consultant__name', 'consult_content'] readonly_fields = ['contact', 'status'] filter_horizontal = ['consult_courses'] actions = ['change_status'] def change_status(self, request, queryset): queryset.update(status=3) # 批量设置可装状态为“结业” change_status.short_description = '客户状态修改为结业' # 设置后台可见描述 site.register(models.CustomerInfo, CustomerInfoAdmin) ``` ### djadmin页面显示actions #### 增加执行按钮表单 修改table_detail.html,在`<table>...`上方增加执行表单 ```html <form> <div class="row"> <div class="col-md-3"> <select class="form-control" name="action"> <option value="">-------</option> {% for action in admin_class.actions %} <option value="{{ action }}">{{ action }}</option> {% endfor %} </select> </div> <div class="col-md-2"> <input type="submit" value="执行" class="btn btn-primary"> </div> </div> </form> <table class="table table-striped"> ...... </table> ``` ![BLOG_20181223_155636_39](/media/blog/images/2018/12/BLOG_20181223_155636_39.png "博客图集BLOG_20181223_155636_39.png") #### 表格内容增加勾选框 修改table_detail.html的`<tbody><tr>`增加一行`td`,设置为复选框 ```html <tbody> {% for obj in queryset %} <tr> <td><input row-select="true" type="checkbox" value="{{ obj.id }}"></td> {% build_table_body obj admin_class %} <td><a href="{% url 'djadmin:table_delete' app_name model_name obj.id %}">删除</a></td> </tr> {% endfor %} </tbody> ``` #### 表格头部增加勾选框 修改table_detail.html的`<thead><tr>`增加一行`th`,设置为复选框 ```html <thead> <tr> <th><input type="checkbox" onclick="SelectALLObjs(this)"></th> {% if admin_class.list_display %} {% for display_field in admin_class.list_display %} <th> <a href="?_order={% get_sorted_data display_field current_order_field forloop.counter0 %}{% render_filter_args admin_class %}"> {{ display_field }} {% get_sorted_arrow display_field current_order_field forloop.counter0 %} </a> </th> {% endfor %} {% else %} {% build_table_head_name admin_class %} {% endif %} <th>操作</th> <!-- {% build_table_head_name admin_class %} --> </tr> </thead> ``` 还需要增加js代码,可以权限/取消全选下方表格内容的勾选,在`{% endblock %}`标签前面增加 ```html <script> function SelectALLObjs(ele) { if ($(ele).prop('checked')){ $('input[row-select]').prop('checked',true) }else{ $('input[row-select]').prop('checked',false) } } </script> ``` ![BLOG_20181223_155708_46](/media/blog/images/2018/12/BLOG_20181223_155708_46.png "博客图集BLOG_20181223_155708_46.png")
很赞哦! (0)
相关文章
文章交流
- emoji
当前用户
未登录,点击 登录专题目录
- 【CRM客户关系管理】01.项目介绍分析
- 【CRM客户关系管理】02.设置项目需要的模型
- 【CRM客户关系管理】03.使用Bootstrap前端模板
- 【CRM客户关系管理】04.用户登录登录及访问控制
- 【CRM客户关系管理】05.动态菜单生成,绝对URL和动态URL
- 【CRM客户关系管理】06.创建djadmin APP,并进行相关配置
- 【CRM客户关系管理】07.自动发现APP注册并显示列表
- 【CRM客户关系管理】08.取出app中model的值,根据list_display配置生成数据列表
- 【CRM客户关系管理】09.根据模型中字段的choices以及时间区间来过滤数据
- 【CRM客户关系管理】10.处理无list_display和list_filter属性时的异常情况
- 【CRM客户关系管理】11.为查询结果添加分页和排序功能
- 【CRM客户关系管理】12.查询结果分页、排序、过滤组合
- 【CRM客户关系管理】13.为结果添加搜索功能,搜索后能对其进行过滤
- 【CRM客户关系管理】14.生成动态ModelForm表单功能
- 【CRM客户关系管理】15.动态ModelsForm增加自定义样式,修改初始化表单并提交
- 【CRM客户关系管理】16. 只读字段readonly_fields处理,表单排除只读显示
- 【CRM客户关系管理】17.多选字段filter_horizontal的实现,已选和未选数据展示
- 【CRM客户关系管理】18.多选字段filter_horizontal的实现,js移动多选框数据和过滤
- 【CRM客户关系管理】19.对象删除功能,显示删除的关联对象和确认
- 【CRM客户关系管理】20.增加详情页分页功能
- 【CRM客户关系管理】21.action功能开发,默认action,生成自己的action
- 【CRM客户关系管理】22.action功能开发,执行action功能,添加默认的delete action