You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Hi, not sure if this is a bug or my having wrong declarations.
What's wrong
The typing of related_manager.all is off when I share a QuerySet between multiple models :
-case: relatedmain: |frommyapp.modelsimportMyModelreveal_type(MyModel.objects.all()) # N: Revealed type is "myapp.models.MyQuerySet[myapp.models.MyModel]"reveal_type(list(MyModel.objects.all())[0]) # N: Revealed type is "myapp.models.MyModel"forxinMyModel.objects.all():
reveal_type(x) # N: Revealed type is "myapp.models.MyModel"reveal_type(x.relatedobject_set.all()) # N: Revealed type is "myapp.models.MyQuerySet[myapp.models.RelatedObject]"reveal_type(list(x.relatedobject_set.all())[0]) # N: Revealed type is "myapp.models.RelatedObject"foryinx.relatedobject_set.all():
reveal_type(y) # N: Revealed type is "myapp.models.RelatedObject"installed_apps:
-myappfiles:
-path: myapp/__init__.py-path: myapp/models.pycontent: |fromdjango.dbimportmodelsfromdjango.db.models.managerimportBaseManagerfromtypingimportList, Dictfromtyping_extensionsimportSelffromtypingimportTypeVar, GenericT=TypeVar("T", bound=models.Model)
classMyQuerySet(models.QuerySet[T], Generic[T]): ...
classMyModel(models.Model):
objects=MyQuerySet.as_manager()
classRelatedObject(models.Model):
objects=MyQuerySet.as_manager()
parent=models.ForeignKey(MyModel, models.PROTECT)
E Actual:
E ...
E main:6: note: Revealed type is "myapp.models.MyQuerySet" (diff)
E main:7: note: Revealed type is "T`1" (diff)
E main:9: note: Revealed type is "T`1" (diff)
E myapp/models:15: error: Need type annotation for "objects" [var-annotated] (diff)
E myapp/models:20: error: Need type annotation for "objects" [var-annotated] (diff)
E Expected:
E ...
E main:6: note: Revealed type is "myapp.models.MyQuerySet[myapp.models.RelatedObject]" (diff)
E main:7: note: Revealed type is "myapp.models.RelatedObject" (diff)
E main:9: note: Revealed type is "myapp.models.RelatedObject" (diff)
-case: related_subclassingmain: |frommyapp.modelsimportMyModelreveal_type(MyModel.objects.all()) # N: Revealed type is "myapp.models.BaseQuerySet[myapp.models.MyModel]"reveal_type(list(MyModel.objects.all())[0]) # N: Revealed type is "myapp.models.MyModel"forxinMyModel.objects.all():
reveal_type(x) # N: Revealed type is "myapp.models.MyModel"reveal_type(x.relatedobject_set.all()) # N: Revealed type is "myapp.models.BaseQuerySet[myapp.models.RelatedObject]"reveal_type(list(x.relatedobject_set.all())[0]) # N: Revealed type is "myapp.models.RelatedObject"foryinx.relatedobject_set.all():
reveal_type(y) # N: Revealed type is "myapp.models.RelatedObject"installed_apps:
-myappfiles:
-path: myapp/__init__.py-path: myapp/models.pycontent: |fromdjango.dbimportmodelsfromdjango.db.models.managerimportBaseManagerfromtypingimportList, Dictfromtyping_extensionsimportSelffromtypingimportTypeVar, GenericT=TypeVar("T", bound=models.Model)
classBaseQuerySet(models.QuerySet[T], Generic[T]): ...
classBaseModel(models.Model):
objects=BaseQuerySet.as_manager()
classMeta:
abstract=TrueclassMyModel(BaseModel):
passclassRelatedObjectQuerySet(BaseQuerySet["RelatedObject"]):
passclassRelatedObject(BaseModel):
parent=models.ForeignKey(MyModel, models.PROTECT)
E Actual:
E ...
E main:6: note: Revealed type is "myapp.models.BaseQuerySet" (diff)
E main:7: note: Revealed type is "T`1" (diff)
E main:9: note: Revealed type is "T`1" (diff)
E myapp/models:13: error: Need type annotation for "objects" [var-annotated] (diff)
E Expected:
E ...
E main:6: note: Revealed type is "myapp.models.BaseQuerySet[myapp.models.RelatedObject]" (diff)
E main:7: note: Revealed type is "myapp.models.RelatedObject" (diff)
E main:9: note: Revealed type is "myapp.models.RelatedObject" (diff)
How is that should be
The types should be MyModel or RelatedObject instead of T.
Note: If I remove the Generic I get Any instead of T.
System information
OS: osx
python version: 3.11.3
django version: Django==4.2.9
mypy version: mypy==1.7.1
django-stubs version: django-stubs==4.2.7
django-stubs-ext version: django-stubs-ext==4.2.7
The text was updated successfully, but these errors were encountered:
Bug report
Hi, not sure if this is a bug or my having wrong declarations.
What's wrong
The typing of related_manager.all is off when I share a QuerySet between multiple models :
How is that should be
The types should be
MyModel
orRelatedObject
instead ofT
.Note: If I remove the Generic I get
Any
instead ofT
.System information
python
version: 3.11.3django
version: Django==4.2.9mypy
version: mypy==1.7.1django-stubs
version: django-stubs==4.2.7django-stubs-ext
version: django-stubs-ext==4.2.7The text was updated successfully, but these errors were encountered: