您现在的位置是: 网站首页 >Django >DjangoCRM客户关系管理 Django

【CRM客户关系管理】21.action功能开发,默认action,生成自己的action

admin2018年12月23日 15:54 Django | JavaScript | JQuery | Python 1243人已围观

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
0人参与,0条评论

当前用户

未登录,点击   登录

站点信息

  • 建站时间:网站已运行2285天
  • 系统信息:Linux
  • 后台程序:Python: 3.8.10
  • 网站框架:Django: 3.2.6
  • 文章统计:257 篇
  • 文章评论:63 条
  • 腾讯分析网站概况-腾讯分析
  • 百度统计网站概况-百度统计
  • 公众号:微信扫描二维码,关注我们
  • QQ群:QQ加群,下载网站的学习源码
返回
顶部
标题 换行 登录
网站