DjangoAdmin不选中选项使用Action方案
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。