mirror of https://github.com/django/django.git
Fixed #31223 -- Added __class_getitem__() to Manager and QuerySet.
This commit is contained in:
parent
fc0b48d2e7
commit
578c03b276
|
@ -35,6 +35,9 @@ class BaseManager:
|
|||
"""Return "app_label.model_label.manager_name"."""
|
||||
return '%s.%s' % (self.model._meta.label, self.name)
|
||||
|
||||
def __class_getitem__(cls, *args, **kwargs):
|
||||
return cls
|
||||
|
||||
def deconstruct(self):
|
||||
"""
|
||||
Return a 5-tuple of the form (as_manager (True), manager_class,
|
||||
|
|
|
@ -323,6 +323,9 @@ class QuerySet:
|
|||
qs._fetch_all()
|
||||
return qs._result_cache[0]
|
||||
|
||||
def __class_getitem__(cls, *args, **kwargs):
|
||||
return cls
|
||||
|
||||
def __and__(self, other):
|
||||
self._merge_sanity_check(other)
|
||||
if isinstance(other, EmptyQuerySet):
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
from unittest import skipUnless
|
||||
|
||||
from django.db import models
|
||||
from django.template import Context, Template
|
||||
from django.test import SimpleTestCase, TestCase, override_settings
|
||||
from django.test.utils import isolate_apps
|
||||
from django.utils.version import PY37
|
||||
|
||||
from .models import (
|
||||
AbstractBase1, AbstractBase2, AbstractBase3, Child1, Child2, Child3,
|
||||
|
@ -285,3 +288,7 @@ class TestManagerInheritance(SimpleTestCase):
|
|||
|
||||
self.assertEqual(TestModel._meta.managers, (TestModel.custom_manager,))
|
||||
self.assertEqual(TestModel._meta.managers_map, {'custom_manager': TestModel.custom_manager})
|
||||
|
||||
@skipUnless(PY37, '__class_getitem__() was added in Python 3.7')
|
||||
def test_manager_class_getitem(self):
|
||||
self.assertIs(models.Manager[Child1], models.Manager)
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
from operator import attrgetter
|
||||
from unittest import skipUnless
|
||||
|
||||
from django.core.exceptions import FieldError, ValidationError
|
||||
from django.db import connection, models
|
||||
from django.test import SimpleTestCase, TestCase
|
||||
from django.test.utils import CaptureQueriesContext, isolate_apps
|
||||
from django.utils.version import PY37
|
||||
|
||||
from .models import (
|
||||
Base, Chef, CommonInfo, GrandChild, GrandParent, ItalianRestaurant,
|
||||
|
@ -217,6 +219,12 @@ class ModelInheritanceTests(TestCase):
|
|||
self.assertSequenceEqual(qs, [p2, p1])
|
||||
self.assertIn(expected_order_by_sql, str(qs.query))
|
||||
|
||||
@skipUnless(PY37, '__class_getitem__() was added in Python 3.7')
|
||||
def test_queryset_class_getitem(self):
|
||||
self.assertIs(models.QuerySet[Post], models.QuerySet)
|
||||
self.assertIs(models.QuerySet[Post, Post], models.QuerySet)
|
||||
self.assertIs(models.QuerySet[Post, int, str], models.QuerySet)
|
||||
|
||||
|
||||
class ModelInheritanceDataTests(TestCase):
|
||||
@classmethod
|
||||
|
|
Loading…
Reference in New Issue