Skip to content

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

@Dresdn

Description

@Dresdn

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 <field_name>" error on model fields.

Here’s the scenario:

  • I created a new project using django-cookiecutter.
  • I added mypy v1.11.1, django-stubs v5.0.4, and tested with Django 4.2.11 and 5.0.8.
  • I have the following model classes:
class FooBase(models.Model):
    name = models.CharField(max_length=255)

    class Meta:
        abstract = True

class Bar(FooBase):
    updated_at = models.DateTimeField(auto_now=True)
  • When both classes are defined in local_app/models.py, there are no errors.
  • However, if I move the FooBase class to a 3rd party package’s models.py (e.g., site-packages/django_extensions/models.py since that came with the cookiecutter install), I get a mypy error on the updated_at field of Bar.

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

  • OS: yes
  • python version: 3.11.9
  • django version: 5.0.8 & 4.2.11
  • mypy version: 1.11.1
  • django-stubs version: 5.0.4
  • django-stubs-ext version: 5.0.4

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",
]

Metadata

Metadata

Assignees

No one assigned

    Labels

    3rd partyPresence of a third party dependency has been mentionedbugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions