【django】 使用【simpleui 】【自定义按钮】点击时取消选择确认

本文介绍如何在SimpleUI中重写actions.html,为无需选中数据的自定义按钮添加直接点击功能,通过修改源码并演示了如何在FakeValAdmin中实现三个操作按钮:返回、全部启用和全部停用。
摘要由CSDN通过智能技术生成

Background

自定义按钮,默认点击时需要选择至少一个选项,但是我定义的这两个按钮不需要选择,就是对全部记录进行操作的,所以我们需要重写simpleui的 actions.html。我这里还是比较懒的处理方法——直接在源码修改哈。

1、默认情况就像这样

在这里插入图片描述

2、找到simpleui的 actions.html

这个是我的路径
D:\software\python3.7.8\Lib\site-packages\simpleui\templates\admin\actions.html

3、修改内容

这里其实只加了一个判断,以 fc_ 开头的按钮就可以直接点击了。所以,我们自定义的按钮需要以 fc_ 开头。代码给你准备好了,直接复制粘贴过去替换原来那一段就行了。

			//TODO 需要做国际化
            if (data_name.substr(0, 3) == "fc_"){
                // 强制运行, 不用选择数据. 按钮名data_name必须以"fc_"开头.
                done.call(this);
            } else if (checkbox_checked == 0 && data_name != "add_item" && !_action.customButton[data_name].action_url) {
                _vue.$alert(getLanuage("Please select at least one option!"), '', {
                    type: 'warning'
                })
            } else if (confirm) {
                _vue.$confirm(confirm, '提示', {
                    confirmButtonText: '确定',
                    cancelButtonText: '取消',
                    type: 'warning'
                }).then(() => done.call(this));

            } else {
                done.call(this)
            }

在这里插入图片描述

4、最后重写 changelist_view 方法就行了

这里我把这部分代码都放上来了。

@admin.register(models.FakeVal)
class FakeValAdmin(admin.ModelAdmin):
    """模拟环境信息"""
    list_display = ('type_id', 'type_code', 'type_name', 'is_enable', 'min_val', 'max_val', 'interval', 'decimal',
                    'remarks')
    list_editable = ('is_enable', 'min_val', 'max_val', 'interval', 'decimal', 'remarks')
    fields = ('type_id', 'type_code', 'type_name', 'is_enable', 'min_val', 'max_val', 'interval', 'decimal', 'remarks',
              'update_user_id', 'update_time')
    readonly_fields = ['type_id', 'type_code', 'type_name', 'update_user_id', 'update_time']
    ordering = ('type_id',)
    list_filter = ('type_id', 'type_code', 'type_name', 'is_enable')
    list_per_page = 20

    # 增加自定义按钮
    actions = ['back_button', 'fc_enable_button', 'fc_disable_button']

    def back_button(self, request, queryset):
        pass

    def fc_enable_button(self, request, queryset):
        models.FakeVal.objects.update(is_enable=1)

    def fc_disable_button(self, request, queryset):
        models.FakeVal.objects.update(is_enable=0)

    def changelist_view(self, request, extra_context=None):
        if 'action' in request.POST and request.POST['action'].startswith('fc_'):
            if not request.POST.getlist(ACTION_CHECKBOX_NAME):
                post = request.POST.copy()
                for u in models.FakeVal.objects.all():
                    post.update({ACTION_CHECKBOX_NAME: str(u.id)})
                request.POST = post
        return super(FakeValAdmin, self).changelist_view(request, extra_context)

    # 按钮名称
    back_button.short_description = ' 返回数据模拟'
    fc_enable_button.short_description = ' 全部启用'
    fc_disable_button.short_description = ' 全部停用'

    # 按钮图标
    back_button.icon = 'fas fa-backward'
    fc_enable_button.icon = 'fas fa-lock-open'
    fc_disable_button.icon = 'fas fa-lock'

    # 按钮颜色
    back_button.type = 'info'
    fc_enable_button.type = 'success'
    fc_disable_button.type = 'danger'

    back_button.action_type = 0
    back_button.action_url = '/chart/fake/'

    def has_delete_permission(self, request, obj=None):
        return False

    def has_add_permission(self, request):
        return False

    def has_change_permission(self, request, obj=None):
        return True

在这里插入图片描述

5、鸣谢

感谢【weixin_40960372】这位大神的指导,大家可以参考他的开源项目 bddjango,我就是根据他这个修改成功的。

  • 11
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WaiSaa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值