From fcd9d08379a2aee3b2c49eab0d0b8db6fd66d091 Mon Sep 17 00:00:00 2001 From: Mariusz Felisiak Date: Fri, 20 Dec 2024 08:43:14 +0100 Subject: [PATCH] Refs #35844 -- Fixed OtherModelFormTests.test_prefetch_related_queryset() test on Python 3.14+. https://github.com/python/cpython/commit/5a23994a3dbee43a0b08f5920032f60f38b63071 --- tests/model_forms/tests.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tests/model_forms/tests.py b/tests/model_forms/tests.py index 4f7fc2c1c0..fd043d3d03 100644 --- a/tests/model_forms/tests.py +++ b/tests/model_forms/tests.py @@ -26,7 +26,7 @@ from django.test import SimpleTestCase, TestCase, ignore_warnings, skipUnlessDBF from django.test.utils import isolate_apps from django.utils.choices import BlankChoiceIterator from django.utils.deprecation import RemovedInDjango60Warning -from django.utils.version import PYPY +from django.utils.version import PY314, PYPY from .models import ( Article, @@ -3048,10 +3048,11 @@ class OtherModelFormTests(TestCase): return ", ".join(c.name for c in obj.colours.all()) field = ColorModelChoiceField(ColourfulItem.objects.prefetch_related("colours")) - # CPython calls ModelChoiceField.__len__() when coercing to tuple. PyPy - # doesn't call __len__() and so .count() isn't called on the QuerySet. - # The following would trigger an extra query if prefetch were ignored. - with self.assertNumQueries(2 if PYPY else 3): + # CPython < 3.14 calls ModelChoiceField.__len__() when coercing to + # tuple. PyPy and Python 3.14+ don't call __len__() and so .count() + # isn't called on the QuerySet. The following would trigger an extra + # query if prefetch were ignored. + with self.assertNumQueries(2 if PYPY or PY314 else 3): self.assertEqual( tuple(field.choices), (