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

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

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

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

1、默认情况就像这样

2、找到simpleui的 actions.html

这个是我的路径
D:softwarepython3.7.8Libsite-packagessimpleuitemplatesadminactions.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/i) {
                _vue.$/confirm/i(/confirm/i, '提示', {
                    /confirm/iButtonText: '确定',
                    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,我就是根据他这个修改成功的。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5592947.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存