adminx.py

from xadmin import views
from .models import *
# 自定义动作所需
from django import forms, VERSION as django_version
from django.core.exceptions import PermissionDenied
from django.db import router
from django.template.response import TemplateResponse
from django.utils.encoding import force_text
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext as _
from django.contrib.admin.utils import get_deleted_objects
from xadmin.util import model_ngettext
from xadmin.views.base import filter_hookACTION_CHECKBOX_NAME = '_selected_action'
checkbox = forms.CheckboxInput({'class': 'action-select'}, lambda value: False)
print(checkbox)def action_checkbox(obj):return checkbox.render(ACTION_CHECKBOX_NAME, force_text(obj.pk))action_checkbox.short_description = mark_safe('<input type="checkbox" id="action-toggle" />')
action_checkbox.allow_tags = True
action_checkbox.allow_export = False
action_checkbox.is_column = False# 继承基本动作模板
from xadmin.plugins.actions import BaseActionViewclass MySelectedAction(BaseActionView):# 这个是执行函数名action_name = "update_selected"# 这个是显示的名字description = "更新所選項"# 这里是是否启用自定义模板delete_confirmation_template = Nonedelete_selected_confirmation_template = Nonedelete_models_batch = Truemodel_perm = 'delete'icon = 'fa fa-times'@filter_hook# 对数据的操作def update_models(self, queryset):print(self.request.POST.get('waiter_id'))print(self.request.POST.get('post'))print(type(queryset))print(queryset)n = queryset.count()if n:if self.delete_models_batch:self.log('update', _('Batch delete %(count)d %(items)s.') % {"count": n, "items": model_ngettext(self.opts, n)})queryset.update(waiter_id=self.request.POST.get('waiter_id'))else:for obj in queryset:self.log('update', '', obj)obj.update(waiter_id=self.request.POST.get('waiter_id'))self.message_user(_("Successfully deleted %(count)d %(items)s.") % {"count": n, "items": model_ngettext(self.opts, n)}, 'success')@filter_hookdef do_action(self, queryset):# Check that the user has delete permission for the actual modelif not self.has_delete_permission():raise PermissionDeniedusing = router.db_for_write(self.model)if django_version > (2, 0):setattr(self.admin_site._registry[self.model], 'has_delete_permission', self.has_delete_permission)# Populate deletable_objects, a data structure of all related objects that# will also be deleted.if django_version > (2, 0):deletable_objects, model_count, perms_needed, protected = get_deleted_objects(queryset, self.opts, self.admin_site)else:deletable_objects, model_count, perms_needed, protected = get_deleted_objects(queryset, self.opts, self.user, self.admin_site, using)# The user has already confirmed the deletion.# Do the deletion and return a None to display the change list view again.if self.request.POST.get('post'):# 这里输出yes# print(self.request.POST.get('post'))if perms_needed:raise PermissionDeniedself.update_models(queryset)# Return None to display the change list page again.return Noneif len(queryset) == 1:objects_name = force_text(self.opts.verbose_name)else:objects_name = force_text(self.opts.verbose_name_plural)if perms_needed or protected:title = _("Cannot delete %(name)s") % {"name": objects_name}else:title = _("Are you sure?")import pymysql# 打开数据库连接db = pymysql.connect(host="*", user="*",password="*", db="*", port=3306)cur = db.cursor()sql = "*"try:cur.execute(sql)  # 执行sql语句results = cur.fetchall()  # 获取查询的所有记录except Exception as e:raise efinally:db.close()  # 关闭连接context = self.get_context()# 展现到页面的内容print(type(results))print(type(queryset))print(results)print(queryset)context.update({"title": title,"objects_name": objects_name,"deletable_objects": [deletable_objects],'queryset': queryset,'results':results,"perms_lacking": perms_needed,"protected": protected,"opts": self.opts,"app_label": self.app_label,'action_checkbox_name': ACTION_CHECKBOX_NAME,})# Display the confirmation page# 确认页的相关参数return TemplateResponse(self.request, self.delete_selected_confirmation_template orself.get_template_list('views/youji_update.html'), context)#使用主题
class BaseSeting(object):enable_themes = Trueuse_bootswatch = True
xadmin.site.register(views.BaseAdminView,BaseSeting)# 设置头部底部
class GlobaleSettings(object):site_title = 'title'site_footer = 'footer'menu_style = 'accordion'
xadmin.site.register(views.CommAdminView,GlobaleSettings)class TxhAdmin(object):# 搜索项search_fields = ['name','addtime']# 过滤项list_filter=['addtime']# 显示的列list_display=('name','phone','sex','is_reg','addtime','visit_type_content','waiter_id')actions=[MySelectedAction,]# 注册使之显示在后台中
xadmin.site.register(white_list,TxhAdmin)

Django xadmin 后台自定义action 动作相关推荐

  1. 通过一文学会搭建Django+Xadmin后台管理系统

    由于项目要快速搭建后台管理系统,想想知道的有Django admin还有Java的Guns,可是Guns并不熟悉,没时间慢慢学,于是使用Django+Xadmin搭建,下面记录详细的过程,请确保你的系 ...

  2. Django实现xadmin后台二级联动、三级联动(提供另一种实现方式)

    目录 一.先看下app文件目录 二.编写models.py样例 三.确定二级数据和js内容 1.编写路由urls.py 2.views传递数据,json格式 3.定制js文件 四.在adminx.py ...

  3. Django实现adminx自定义布局管理编辑界面

    出于强迫症,默认的Django的Adminx后台不美化的化,使用效果欠佳.在许多Web应用程序中,用户管理是一个重要的功能,而Django提供了用户继承功能,可以轻松地扩展和定制用户模型.使用相关的插 ...

  4. Django 慕课前后端实战 -- xadmin后台管理系统、登录模块、注册模块、邮箱激活链接、找回密码

    注意:win下面 pip install 安装python module失败后,可以去https://www.lfd.uci.edu/~gohlke/pythonlibs/网站才在相应的module, ...

  5. 自定义xadmin后台首页

    登陆xadmin后台,首页默认是空白,可以自己添加小组件,xadmin一切都是那么美好,但是添加小组件遇到了个大坑,快整了2个礼拜,最终实现想要的界面.初始的页面如图: 本机后台显示这个页面正常,do ...

  6. Django+xadmin 打造线上教育平台(二)-1(旧)

    Django+xadmin 打造线上教育平台 一.完成用户注册和登录功能  1-1.完成首页页面,访问:http://127.0.0.1:8000/index/ 1)html页面代码: <!DO ...

  7. django+xadmin 在线教育网站(三)

    在此之前我们已成功的使用xadmin将后台管理系统搭建起来了,接下来,开始我们后台的功能处理 首先是登录功能 登录功能 (1)把html文件中index.html和login.html拷贝到templ ...

  8. Django+xadmin 打造线上教育平台(二)登录-注册(重制)

    Django+xadmin 打造线上教育平台(二) 一.首页 1)views.py/index函数: def index(request):"""首页"&quo ...

  9. 第三百八十一节,Django+Xadmin打造上线标准的在线教育平台—xadmin全局配置

    第三百八十一节,Django+Xadmin打造上线标准的在线教育平台-xadmin全局配置 1.xadmin主题设置 要使用xadmin主题,需要在一个app下的adminx.py后台注册文件里,写一 ...

最新文章

  1. ajax发送动态字符传,如何发送ajax请求文件与其他字符串的变量?
  2. sklearn.preprocessing下的数据标准化(scale、MinMaxScaler)
  3. 华为S5300系列交换机V100R005SPH008热补丁
  4. 执行系统命令,subprocess使用说明
  5. 【数据结构】链表的python实现
  6. 【路径规划】基于matlab遗传算法公交排班系统分析【含Matlab源码 220期】
  7. 计算机平方在线使用,开平方计算器在线
  8. 关于wow游戏插件制作之前的几件事
  9. 太强了!GitHub中文开源项目榜单出炉,暴露了程序员的硬性需求!
  10. Wolf从零学编程-用Python打造简单加密程序(一)
  11. python for ArcGIS 绘制沈阳市板块地图
  12. 网络与信息安全-第三章-对称秘钥加密算法
  13. 汉信码生成和识别SDK
  14. 商人过河问题c语言图片,商人渡河问题图解法.doc
  15. 一句话马密码暴力破解篇(黑吃黑)
  16. 个人计算机也可以做为服务器,普通个人电脑可以充当电脑服务器来使用吗
  17. linux终端打英文间隔太大,解决vs code 内置终端,字体间隔过大问题。(linux centos7成功)...
  18. 树形json扁平化,一维数组树状化,对象深拷贝,元素后插入新元素,格式或动态路由等常用js合集
  19. FastDB 高效率的内存数据库系统
  20. 机器学习中的数学——常用概率分布(四):均匀分布(Uniform分布)

热门文章

  1. 电子班牌系统服务器,电子班牌管理系统
  2. jmeter提取多个变量的多个值_jmeter用一个正则提取器提取多个值的两种方法
  3. 谷歌浏览器异步请求后台session变了_session打爆面试官
  4. 已知三角形三点坐标求角度_高中数学:椭圆相关角度的最值问题
  5. python 搭建登陆系统_Django 搭建CMDB系统完整[1](用户登录)
  6. mysql的增_MySQL-----增
  7. python 字符串切割例题_Python字符串及练习题
  8. 全局变量中断原子操作_中断函数里改变一个全局变量的值,在主函数里却检测到未变化...
  9. laravel5.5的定时任务详解(demo)
  10. Java取模函数,再不刷题就晚了!