1
0
mirror of https://github.com/django/django.git synced 2025-03-31 11:37:06 +00:00

[5.0.x] Fixed #35426 -- Updated querysets to be a required argument of GenericPrefetch.

Backport of 9a27c76021f934201cccf12215514a3091325ec8 from main.
This commit is contained in:
sobolevn 2024-05-03 11:40:50 +03:00 committed by Sarah Boyce
parent ac9e18f1c4
commit 9b5029f048
4 changed files with 13 additions and 2 deletions

View File

@ -3,7 +3,7 @@ from django.db.models.query import ModelIterable, RawQuerySet
class GenericPrefetch(Prefetch):
def __init__(self, lookup, querysets=None, to_attr=None):
def __init__(self, lookup, querysets, to_attr=None):
for queryset in querysets:
if queryset is not None and (
isinstance(queryset, RawQuerySet)

View File

@ -598,7 +598,7 @@ information.
.. versionadded:: 5.0
.. class:: GenericPrefetch(lookup, querysets=None, to_attr=None)
.. class:: GenericPrefetch(lookup, querysets, to_attr=None)
This lookup is similar to ``Prefetch()`` and it should only be used on
``GenericForeignKey``. The ``querysets`` argument accepts a list of querysets,

View File

@ -30,3 +30,6 @@ Bugfixes
* Fixed a bug in Django 5.0 that caused a migration crash when altering a
``GeneratedField`` referencing a renamed field (:ticket:`35422`).
* Fixed a bug in Django 5.0 where the ``querysets`` argument of
``GenericPrefetch`` was not required (:ticket:`35426`).

View File

@ -333,6 +333,14 @@ class ContentTypesMultidbTests(TestCase):
class GenericPrefetchTests(TestCase):
def test_querysets_required(self):
msg = (
"GenericPrefetch.__init__() missing 1 required "
"positional argument: 'querysets'"
)
with self.assertRaisesMessage(TypeError, msg):
GenericPrefetch("question")
def test_values_queryset(self):
msg = "Prefetch querysets cannot use raw(), values(), and values_list()."
with self.assertRaisesMessage(ValueError, msg):