Skip to content

Commit

Permalink
Add compatibility with django3.2 and django4.0
Browse files Browse the repository at this point in the history
  • Loading branch information
hassaanalansary committed Jul 23, 2024
1 parent a7ad191 commit bfe98a1
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 5 deletions.
10 changes: 8 additions & 2 deletions bulk_tracker/collector.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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_)
Expand Down
12 changes: 9 additions & 3 deletions bulk_tracker/managers.py
Original file line number Diff line number Diff line change
Expand Up @@ -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_)

Expand Down

0 comments on commit bfe98a1

Please sign in to comment.