summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorRodrigo Vieira <rodrigo.vieira@gmail.com>2026-03-31 20:34:56 -0300
committerJacob Walls <jacobtylerwalls@gmail.com>2026-04-01 13:51:37 -0400
commit856c915326768962806705ca7733e4abbb8f794f (patch)
treefbadce8821a1d4dbd5e7aeba0a5b70f76463704e /tests
parent08aa1b5ac8fd95d165aad749f3ce29de4aa1be0d (diff)
Fixed #37004 -- Used QuerySet.totally_ordered in BaseModelFormSet.get_queryset() for stable ordering.
Diffstat (limited to 'tests')
-rw-r--r--tests/model_formsets/tests.py31
1 files changed, 30 insertions, 1 deletions
diff --git a/tests/model_formsets/tests.py b/tests/model_formsets/tests.py
index 40f206277b..9436642573 100644
--- a/tests/model_formsets/tests.py
+++ b/tests/model_formsets/tests.py
@@ -1782,7 +1782,36 @@ class ModelFormsetTest(TestCase):
formset = ProductFormSet()
queryset = formset.get_queryset()
- self.assertEqual(queryset.query.order_by, ("id",))
+ self.assertEqual(queryset.query.order_by, ("pk",))
+
+ def test_get_queryset_appends_pk_to_explicit_queryset_ordering(self):
+ # Author.name is non-unique, so order_by("name") is not totally
+ # ordered.
+ AuthorFormSet = modelformset_factory(Author, fields="__all__")
+ formset = AuthorFormSet(queryset=Author.objects.order_by("name"))
+
+ queryset = formset.get_queryset()
+ self.assertEqual(queryset.query.order_by, ("name", "pk"))
+
+ def test_get_queryset_appends_pk_to_meta_ordering(self):
+ # Author has Meta.ordering = ("name",) which is not deterministic
+ # by itself.
+ AuthorFormSet = modelformset_factory(Author, fields="__all__")
+ formset = AuthorFormSet()
+
+ queryset = formset.get_queryset()
+ self.assertEqual(queryset.query.order_by, ("name", "pk"))
+
+ def test_get_queryset_unchanged_when_already_totally_ordered(self):
+ # Ordering by pk is already totally ordered; pk must not be
+ # appended again.
+ AuthorFormSet = modelformset_factory(Author, fields="__all__")
+ formset = AuthorFormSet(queryset=Author.objects.order_by("pk"))
+
+ queryset = formset.get_queryset()
+ # Must be exactly ("pk",), not ("pk", "pk").
+ self.assertEqual(queryset.query.order_by, ("pk",))
+ self.assertIs(queryset.totally_ordered, True)
def test_prevent_duplicates_from_with_the_same_formset(self):
FormSet = modelformset_factory(Product, fields="__all__", extra=2)