DjangoAdmin不选中选项使用Action方案

DjangoAdmin不选中选项使用Action方案

img


如何设置不用选中选项,就可以执行函数啊,查了一下资料,修改了changelist_view还是不行

class CheckAdmin(admin.ModelAdmin):
    list_display=('Cnumber','Mnumber','C_date','Now_inventory','Actual_num','out_num','in_num')

    # def has_add_permission(self, request: HttpRequest) -> bool:
    #     return False
    actions = ['draw_prize']

    def draw_prize(self, request, queryset):
        pass
        
 
    draw_prize.short_description = '开始抽奖'
    draw_prize.type = 'warning'
    draw_prize.confirm = '确认即开始抽奖并发送中奖通知~'
    draw_prize.acts_on_all = True

    def changelist_view(self, request, extra_context=None):
        if 'action' in request.POST and request.POST['action'] == 'draw_prize':
            if not request.POST.getlist(ACTION_CHECKBOX_NAME):
                post = request.POST.copy()
                for u in Check_sheet.objects.all():
                    post.update({ACTION_CHECKBOX_NAME: str(u.Cnumber)})
                request._set_post(post)
        return super(CheckAdmin, self).changelist_view(request, extra_context)

在admin.py中定义一个ModelAdmin子类,并重写changelist_view方法。
在changelist_view方法中,检查请求POST参数中是否存在action字段,以及action字段的值是否为draw_prize。
如果存在action字段且值为draw_prize,则对所有对象添加选中标志,然后调用super()方法执行操作。
定义一个名为draw_prize的Action函数,该函数将在所有选定的对象上执行。
在list_display中添加Cnumber字段,以便在列表中显示该字段。
将draw_prize函数添加到actions列表中,并设置其属性,例如short_description、type、confirm和acts_on_all。