python之Django學習筆記(五)---后台(admin.py)Action使用


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/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM