typeddjango / django-stubs

PEP-484 stubs for Django
MIT License
1.56k stars 433 forks source link

Type Annotation Errors in Models Inheriting from 3rd Party Packages #2341

Open Dresdn opened 3 weeks ago

Dresdn commented 3 weeks ago

Bug report

What's wrong

With the latest django-stubs v5.0.4, I've noticed strange behavior when using models that inherit from 3rd party packages. Specifically, mypy throws a "Need type annotation for " error on model fields.

Here’s the scenario:

class FooBase(models.Model):
    name = models.CharField(max_length=255)

    class Meta:
        abstract = True

class Bar(FooBase):
    updated_at = models.DateTimeField(auto_now=True)

This issue only started occurring with django-stubs v5.0.3 or v5.0.4 and mypy v1.11.0 or v1.11.1. It was working correctly with the previous versions (django-stubs v5.0.2 and mypy v1.10.1).

I am aware of issue #2011, which has been closed. However, the difference here is that the code was working fine with the prior django-stubs and mypy versions, but the error occurs after updating to the latest versions.

How is that should be

Type checking should pass without errors when using models that inherit from 3rd party packages, just as it did with previous versions of django-stubs and mypy.

System information

mypy Settings

[tool.mypy]
python_version = "3.11"
check_untyped_defs = true
ignore_missing_imports = true
warn_unused_ignores = true
warn_redundant_casts = true
warn_unused_configs = true
plugins = [
    "mypy_django_plugin.main",
]
Dresdn commented 3 weeks ago

One other fun tidbit of information: not all fields throw an error.

models.FileField(), models.ImageField(), and models.JSONField() don't throw a type error. As far as I can tell, all the others do (IntegerField(), TextField(), etc.)

YPCrumble commented 1 week ago

I believe I'm getting the same issue - it asks for var-annotated on nearly every field in a model that inherits from django extensions' TimeStampedModel, for instance. I believe it was introduced in django-stubs 5.0.3.