Monkeypatch some more generics. (#1050)

* Add generic monkeypatching for `FileProxyMixin`.

This fixes `TypeError: 'type' object is not subscriptable` for
`django.core.files.File` and `django.core.files.base.ContentFile`.

* Add generic monkeypatching for `ForeignKey`.

This matches the change coming in Django 4.1.

See https://github.com/django/django/pull/15571
This commit is contained in:
Nick Pope
2022-07-05 23:19:51 +01:00
committed by GitHub
parent 516deba2fa
commit e8d52fe7da
2 changed files with 7 additions and 0 deletions

View File

@@ -4,8 +4,10 @@ from django import VERSION as VERSION
from django.contrib.admin import ModelAdmin
from django.contrib.admin.options import BaseModelAdmin
from django.contrib.syndication.views import Feed
from django.core.files.utils import FileProxyMixin
from django.core.paginator import Paginator
from django.db.models.fields import Field
from django.db.models.fields.related import ForeignKey
from django.db.models.manager import BaseManager
from django.db.models.query import QuerySet
from django.forms.formsets import BaseFormSet
@@ -54,9 +56,12 @@ _need_generic: List[MPGeneric[Any]] = [
MPGeneric(BaseModelForm),
MPGeneric(BaseModelFormSet),
MPGeneric(Feed),
MPGeneric(FileProxyMixin),
# These types do have native `__class_getitem__` method since django 3.1:
MPGeneric(QuerySet, (3, 1)),
MPGeneric(BaseManager, (3, 1)),
# These types do have native `__class_getitem__` method since django 4.1:
MPGeneric(ForeignKey, (4, 1)),
]

View File

@@ -82,6 +82,8 @@ def test_patched_extra_classes_generics(make_generic_classes: _MakeGenericClasse
(3, 0),
(3, 1),
(3, 2),
(4, 0),
(4, 1),
],
)
def test_patched_version_specific(