From 1b37f79581d64119f27495d5dd84c7b93d561565 Mon Sep 17 00:00:00 2001 From: Sage Abdullah Date: Tue, 7 Apr 2026 10:25:53 +0100 Subject: [PATCH 1/2] Add totally_ordered attribute to FakeQuerySet Added in https://github.com/django/django/commit/08b4dfc5734f5d2fce685eabcd65385a6656db2f --- modelcluster/queryset.py | 1 + 1 file changed, 1 insertion(+) diff --git a/modelcluster/queryset.py b/modelcluster/queryset.py index e766652..788d99f 100644 --- a/modelcluster/queryset.py +++ b/modelcluster/queryset.py @@ -556,3 +556,4 @@ def __len__(self): return len(self.results) ordered = True # results are returned in a consistent order + totally_ordered = True From 1537ccf1d285b0903b727c88631e91ed69423dfd Mon Sep 17 00:00:00 2001 From: Sage Abdullah Date: Tue, 7 Apr 2026 10:23:42 +0100 Subject: [PATCH 2/2] Add DeferringManyRelatedManager.set_base() hook --- modelcluster/fields.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modelcluster/fields.py b/modelcluster/fields.py index cc78136..7874ba6 100644 --- a/modelcluster/fields.py +++ b/modelcluster/fields.py @@ -451,7 +451,7 @@ def clear(self): """ self.set([]) - def set(self, objs, bulk=True, clear=False): + def set_base(self, objs, bulk=True, clear=False, through_defaults=None, raw=False): # cast objs to a list so that: # 1) we can call len() on it (which we can't do on, say, a queryset) # 2) if we need to sort it, we can do so without mutating the original @@ -472,6 +472,9 @@ def set(self, objs, bulk=True, clear=False): cluster_related_objects[relation_name] = objs + def set(self, objs, *, clear=False, through_defaults=None): + self.set_base(objs, clear=clear, through_defaults=through_defaults) + def remove(self, *items_to_remove): """ Remove the passed items from the stored object set, but do not commit the change