@@ -486,6 +486,7 @@ def delete(
486
486
transaction : bool = True ,
487
487
safemode : Union [bool , None ] = None ,
488
488
force_parts : bool = False ,
489
+ include_master : bool = True ,
489
490
) -> int :
490
491
"""
491
492
Deletes the contents of the table and its dependent tables, recursively.
@@ -497,6 +498,7 @@ def delete(
497
498
safemode: If `True`, prohibit nested transactions and prompt to confirm. Default
498
499
is `dj.config['safemode']`.
499
500
force_parts: Delete from parts even when not deleting from their masters.
501
+ include_master: If `True`, delete from the master table as well. Default is `True`.
500
502
501
503
Returns:
502
504
Number of deleted rows (excluding those from dependent tables).
@@ -565,7 +567,22 @@ def cascade(table):
565
567
)
566
568
else :
567
569
child &= table .proj ()
570
+
571
+ master = get_master (child .full_table_name )
572
+ if include_master and master and master not in deleted :
573
+ master_table = FreeTable (table .connection , master )
574
+ master_table ._restriction = [
575
+ make_condition (
576
+ master_table ,
577
+ (master_table & child ).proj ().fetch (),
578
+ set (),
579
+ )
580
+ ]
581
+
568
582
cascade (child )
583
+
584
+ if include_master and master and master not in deleted :
585
+ cascade (master_table )
569
586
else :
570
587
deleted .add (table .full_table_name )
571
588
logger .info (
0 commit comments