diff --git a/bulk_tracker/collector.py b/bulk_tracker/collector.py index b64d75c..6e3664e 100644 --- a/bulk_tracker/collector.py +++ b/bulk_tracker/collector.py @@ -37,12 +37,15 @@ def delete(self, *, tracking_info_: TrackingInfo | None = None): with transaction.atomic(using=self.using, savepoint=False): # send pre_delete signals for model, obj in self.instances_with_model(): + origin = {} + if hasattr(self, "origin"): # origin was removed in Django 3.2 and 4.0. + origin = {"origin": self.origin} if not model._meta.auto_created: signals.pre_delete.send( sender=model, instance=obj, using=self.using, - origin=self.origin, + **origin, ) bulk_tracker_deletes = defaultdict(list) # fast deletes @@ -75,12 +78,15 @@ def delete(self, *, tracking_info_: TrackingInfo | None = None): bulk_tracker_deletes[model].extend(deepcopy(instances)) if not model._meta.auto_created: + origin = {} + if hasattr(self, "origin"): # origin was removed in Django 3.2 and 4.0. + origin = {"origin": self.origin} for obj in instances: signals.post_delete.send( sender=model, instance=obj, using=self.using, - origin=self.origin, + **origin, ) for model, objs in bulk_tracker_deletes.items(): send_post_delete_signal(objs, model, tracking_info_) diff --git a/bulk_tracker/managers.py b/bulk_tracker/managers.py index e6705b9..7ad909b 100644 --- a/bulk_tracker/managers.py +++ b/bulk_tracker/managers.py @@ -138,9 +138,15 @@ def delete(self, *, tracking_info_: TrackingInfo | None = None, **kwarg): # Disable non-supported fields. del_query.query.select_for_update = False del_query.query.select_related = False - del_query.query.clear_ordering(force=True) - - collector = BulkTrackerCollector(using=del_query.db, origin=self) + try: + del_query.query.clear_ordering(force=True) + except TypeError: + # Django 3.2 has force_empty not force + del_query.query.clear_ordering(force_empty=True) + origin = {} + if hasattr(self, "origin"): # origin was removed in Django 3.2 and 4.0. + origin = {"origin": self.origin} + collector = BulkTrackerCollector(using=del_query.db, **origin) collector.collect(del_query) deleted, _rows_count = collector.delete(tracking_info_=tracking_info_)