11from collections import OrderedDict
2- from django import forms
2+ from django import forms , VERSION as django_version
33from django .core .exceptions import PermissionDenied
44from django .db import router
55from django .http import HttpResponse , HttpResponseRedirect
1919from xadmin .views import BaseAdminPlugin , ListAdminView
2020from xadmin .views .base import filter_hook , ModelAdminView
2121
22+ from xadmin import views
2223
2324ACTION_CHECKBOX_NAME = '_selected_action'
2425checkbox = forms .CheckboxInput ({'class' : 'action-select' }, lambda value : False )
2526
2627
2728def action_checkbox (obj ):
2829 return checkbox .render (ACTION_CHECKBOX_NAME , force_text (obj .pk ))
30+
31+
2932action_checkbox .short_description = mark_safe (
3033 '<input type="checkbox" id="action-toggle" />' )
3134action_checkbox .allow_tags = True
3235action_checkbox .allow_export = False
3336action_checkbox .is_column = False
3437
38+
3539class BaseActionView (ModelAdminView ):
3640 action_name = None
3741 description = None
@@ -70,7 +74,7 @@ def delete_models(self, queryset):
7074 n = queryset .count ()
7175 if n :
7276 if self .delete_models_batch :
73- self .log ('delete' , _ ('Batch delete %(count)d %(items)s.' ) % { "count" : n , "items" : model_ngettext (self .opts , n ) })
77+ self .log ('delete' , _ ('Batch delete %(count)d %(items)s.' ) % {"count" : n , "items" : model_ngettext (self .opts , n )})
7478 queryset .delete ()
7579 else :
7680 for obj in queryset :
@@ -88,10 +92,18 @@ def do_action(self, queryset):
8892
8993 using = router .db_for_write (self .model )
9094
95+ if django_version > (2 , 0 ):
96+ setattr (self .admin_site ._registry [self .model ], 'has_delete_permission' , self .has_delete_permission )
97+
9198 # Populate deletable_objects, a data structure of all related objects that
9299 # will also be deleted.
93- deletable_objects , model_count , perms_needed , protected = get_deleted_objects (
94- queryset , self .opts , self .user , self .admin_site , using )
100+
101+ if django_version > (2 , 0 ):
102+ deletable_objects , model_count , perms_needed , protected = get_deleted_objects (
103+ queryset , self .opts , self .admin_site )
104+ else :
105+ deletable_objects , model_count , perms_needed , protected = get_deleted_objects (
106+ queryset , self .opts , self .user , self .admin_site , using )
95107
96108 # The user has already confirmed the deletion.
97109 # Do the deletion and return a None to display the change list view again.
0 commit comments