Python Django循环导入和使用mypy进行类型检查

Python Django循环导入和使用mypy进行类型检查,python,django,mypy,python-typing,Python,Django,Mypy,Python Typing,我正试图用我的Django模型创建一个简单的自定义管理器。它会导致循环导入,因为我正在尝试从models.py导入manager,并从managers.py导入模型。但是,由于我的经理正在创建模型并添加一些额外的属性,因此该方法的类型提示是模型实例。我在修复该类型提示时遇到问题,因为它尚未导入 # models.py from .managers import PublishedBundleManager class PublishedBundle(models.Model): dat

我正试图用我的Django模型创建一个简单的自定义管理器。它会导致循环导入,因为我正在尝试从models.py导入manager,并从managers.py导入模型。但是,由于我的经理正在创建模型并添加一些额外的属性,因此该方法的类型提示是模型实例。我在修复该类型提示时遇到问题,因为它尚未导入

# models.py
from .managers import PublishedBundleManager

class PublishedBundle(models.Model):
    data = JSONField()
    md5_checksum = models.CharField(max_length=128)

    objects = PublishedBundleManager()
管理器有一种方法可以帮助我创建模型实例,但为了方便起见,它会在创建过程中计算要填写的校验和。为了修复循环导入,我使用了typing.TYPE\u检查

# managers.py
import typing as t

from django.apps import apps
from django.db import models

if t.TYPE_CHECKING:
    PublishedBundle = apps.get_model(app_label="the_hugh", model_name="PublishedBundle")

class PublishedBundleManager(models.Manager):  # Error 1
    def create_publish(self, data: t.Dict, description: str) -> PublishedBundle:  # Error 2
        PublishedBundle = apps.get_model(app_label="my_app", model_name="PublishedBundle")
        json_data = json.dumps(data, sort_keys=True)
        md5_checksum = hashlib.md5(json_data.encode("utf-8")).hexdigest()
        return PublishedBundle.objects.create(data=data, md5_checksum=md5_checksum)
但是,我有两个错误

  • 缺少泛型类型“Manager”[type arg]mypy的类型参数(错误)
  • 未定义名称“PublishedBundle”

  • 我对类型化python相当陌生,以前从未遇到过这个问题。我知道发生2是因为尚未定义发布绑定,但我无法定义它,因为它会导致循环导入。有人能帮我吗?

    解决这个问题的一个简单方法是将经理和模型放在同一个文件中。无论如何,它们都是错综复杂的关系。

    使用
    PublishedBundle
    作为变量名和类型在任何情况下都是有问题的。