django_deletion_defaultdict files: 1 | +12/-13
Option A: refactor(django/db): Counter defaultdict partial
Option B: Used defaultdict in deletion.Collector.
Which commit message is better?
ABEqualSkip
Anchors: Counterself.dataself.field_updates
Files
Path
django/db/models/deletion.py
Diff
diff --git a/django/db/models/deletion.py b/django/db/models/deletion.py
@@
-from collections import Counter
+from collections import Counter, defaultdict
+from functools import partial
@@
-        # Initially, {model: {instances}}, later values become lists.
-        self.data = {}
-        self.field_updates = {}
+        # Initially, {model: {instances}}, later values become lists.
+        self.data = defaultdict(set)
+        self.field_updates = defaultdict(partial(defaultdict, set))
@@
-        # {model: {models}}
-        self.dependencies = {}
+        # {model: {models}}
+        self.dependencies = defaultdict(set)
@@
-        instances = self.data.setdefault(model, set())
+        instances = self.data[model]
@@
-            self.dependencies.setdefault(
-                source._meta.concrete_model, set()
-            ).add(model._meta.concrete_model)
+            self.dependencies[source._meta.concrete_model].add(
+                model._meta.concrete_model
+            )
@@
-        self.field_updates.setdefault(
-            model, {}
-        ).setdefault((field, value), set()).update(objs)
+        self.field_updates[model][field, value].update(objs)