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
@@ -777,9 +778,15 @@ def delete_files_or_folders(self, request, files_queryset, folders_queryset):
777778 n = files_queryset .count () + folders_queryset .count ()
778779 if n :
779780 # delete all explicitly selected files
780- for f in files_queryset :
781- self .log_deletion (request , f , force_str (f ))
782- f .delete ()
781+ if DJANGO_VERSION >= (5 , 1 ):
782+ self .log_deletions (request , files_queryset )
783+ # Still need to delete files individually (not only the database entries)
784+ for f in files_queryset :
785+ f .delete ()
786+ else :
787+ for f in files_queryset :
788+ self .log_deletion (request , f , force_str (f ))
789+ f .delete ()
783790 # delete all files in all selected folders and their children
784791 # This would happen automatically by ways of the delete
785792 # cascade, but then the individual .delete() methods won't be
@@ -788,13 +795,24 @@ def delete_files_or_folders(self, request, files_queryset, folders_queryset):
788795 for folder in folders_queryset :
789796 folder_ids .add (folder .id )
790797 folder_ids .update (folder .get_descendants_ids ())
791- for f in File .objects .filter (folder__in = folder_ids ):
792- self .log_deletion (request , f , force_str (f ))
793- f .delete ()
798+ if DJANGO_VERSION >= (5 , 1 ):
799+ qs = File .objects .filter (folder__in = folder_ids )
800+ self .log_deletions (request , qs )
801+ # Still need to delete files individually (not only the database entries)
802+ for f in qs :
803+ f .delete ()
804+ else :
805+ for f in File .objects .filter (folder__in = folder_ids ):
806+ self .log_deletion (request , f , force_str (f ))
807+ f .delete ()
794808 # delete all folders
795- for f in folders_queryset :
796- self .log_deletion (request , f , force_str (f ))
797- f .delete ()
809+ if DJANGO_VERSION >= (5 , 1 ):
810+ self .log_deletions (request , files_queryset )
811+ folders_queryset .delete ()
812+ else :
813+ for f in folders_queryset :
814+ self .log_deletion (request , f , force_str (f ))
815+ f .delete ()
798816 self .message_user (request , _ ("Successfully deleted %(count)d files and/or folders." ) % {"count" : n , })
799817 # Return None to display the change list page again.
800818 return None
0 commit comments