55from urllib .parse import quote as urlquote
66from urllib .parse import unquote as urlunquote
77
8+ from django import VERSION as DJANGO_VERSION
89from django import forms
910from django .conf import settings as django_settings
1011from django .contrib import messages
@@ -799,9 +800,15 @@ def delete_files_or_folders(self, request, files_queryset, folders_queryset):
799800 n = files_queryset .count () + folders_queryset .count ()
800801 if n :
801802 # delete all explicitly selected files
802- for f in files_queryset :
803- self .log_deletion (request , f , force_str (f ))
804- f .delete ()
803+ if DJANGO_VERSION >= (5 , 1 ):
804+ self .log_deletions (request , files_queryset )
805+ # Still need to delete files individually (not only the database entries)
806+ for f in files_queryset :
807+ f .delete ()
808+ else :
809+ for f in files_queryset :
810+ self .log_deletion (request , f , force_str (f ))
811+ f .delete ()
805812 # delete all files in all selected folders and their children
806813 # This would happen automatically by ways of the delete
807814 # cascade, but then the individual .delete() methods won't be
@@ -810,13 +817,24 @@ def delete_files_or_folders(self, request, files_queryset, folders_queryset):
810817 for folder in folders_queryset :
811818 folder_ids .add (folder .id )
812819 folder_ids .update (folder .get_descendants_ids ())
813- for f in File .objects .filter (folder__in = folder_ids ):
814- self .log_deletion (request , f , force_str (f ))
815- f .delete ()
820+ if DJANGO_VERSION >= (5 , 1 ):
821+ qs = File .objects .filter (folder__in = folder_ids )
822+ self .log_deletions (request , qs )
823+ # Still need to delete files individually (not only the database entries)
824+ for f in qs :
825+ f .delete ()
826+ else :
827+ for f in File .objects .filter (folder__in = folder_ids ):
828+ self .log_deletion (request , f , force_str (f ))
829+ f .delete ()
816830 # delete all folders
817- for f in folders_queryset :
818- self .log_deletion (request , f , force_str (f ))
819- f .delete ()
831+ if DJANGO_VERSION >= (5 , 1 ):
832+ self .log_deletions (request , files_queryset )
833+ folders_queryset .delete ()
834+ else :
835+ for f in folders_queryset :
836+ self .log_deletion (request , f , force_str (f ))
837+ f .delete ()
820838 self .message_user (request , _ ("Successfully deleted %(count)d files and/or folders." ) % {"count" : n , })
821839 # Return None to display the change list page again.
822840 return None
0 commit comments