Action即在列表界面字段上面的一個插件
默認只有一個刪除動作:Delete selected 表名。這可以禁用這個action,在admin.py中增加一行如下代碼:
class StudentAdmin(admin.ModelAdmin): list_display = ('NameNo','Sex_color','Age') admin.site.register(Student,StudentAdmin) admin.site.disable_action('delete_selected')#禁用默認Action
禁掉刪除功能,也可以自定義一個刪除功能:
def delete_selected(modeladmin,request,queryset):#自定義刪除動作 a = queryset.delete()[0] if a == 1: message = '1 item is deleted!' else: message = '%d items are deleted!'%a modeladmin.message_user(request, message) delete_selected.short_description = '刪除選中項' class StudentAdmin(admin.ModelAdmin): list_display = ('NameNo','Sex_color','Age') actions = (delete_selected,)#添加自定義動作到Action中
刷新界面可以看到Aciton里面已經有了新添加的動作:
這里是重寫了delete_selected這個方法,所以即使上面沒有禁用這個方法,這里也會只顯示添加的方法。(若不加入action中,還是會顯示原來的方法)
當然也可以把Delete_selected這個動作用到所有的模型中,和禁用類似,只需一行代碼:
admin.site.add_action(delete_selected)#所有模型都有此動作
actions:
既然這樣,也可以自定義其他動作,然后加入到Action中,比如修改選中記錄的性別為female或者male
在admin.py中添加如下代碼:
def change_sex_female(modeladmin,request,queryset): a = queryset.update(Sex = 'F') if a == 1: message = '1 item is updated to Female!' else: message = '%d items are updated to Female!'%a modeladmin.message_user(request,message)#修改成功后的提示 change_sex_female.short_description = '修改性別為Female' def change_sex_male(modeladmin,request,queryset): a = queryset.update(Sex = 'M') if a == 1: message = '1 item is updated to Male!' else: message = '%d items are updated to Male!'%a modeladmin.message_user(request,message)#修改成功后的提示 change_sex_male.short_description = '修改性別為Male' class StudentAdmin(admin.ModelAdmin): list_display = ('NameNo','Sex_color','Age') actions = (delete_selected,change_sex_female,change_sex_male,)#把自定義的倆個動作加入Action
上述代碼中增加倆個動作change_sex_female和change_sex_male,然后在StudentAdmin中把這倆個動作加入了actions中,刷新界面可以看到已經增加了倆個Action:
可以選擇幾條數據,然后執行,會有相關提示:
也可以根據當前性別進行反轉操作:
def change_sex(modeladmin,request,queryset): if queryset.filter(Sex='F').count() == 1 or queryset.filter(Sex='M').count() == 1: if queryset.filter(Sex='F'): queryset.update(Sex='M') message = 'Item is changed to Male!' else: queryset.update(Sex='F') message = 'Item is changed to Female!' else: message = 'Can\'t select more than 1 item!' modeladmin.message_user(request,message) change_sex.short_description = '性別反轉' class StudentAdmin(admin.ModelAdmin): list_display = ('NameNo','Sex_color','Age') actions = (change_sex_female,change_sex_male,delete_selected,change_sex,)
如果actions設置為None,則不會出現Action這個插件
同樣,如果設置禁用Delete_selected動作並且沒有設置其他Action,name也不會出現Aciton這個插件
action_on_top:
默認True顯示在頂端,若設置為False則不會顯示在頂端
action_on_bottom:
默認False不顯示,若設置為True則顯示在低端
actions_selection_counter:
默認True,顯示插件右側的統計數,若設置為False,則不會顯示統計
資料
https://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/
https://docs.djangoproject.com/en/dev/ref/contrib/admin/