如何解决Django循环导入并使用mypy
我正在尝试使用我的Django模型之一创建一个简单的自定义管理器。由于我尝试从models.py和manager.py导入管理器,因此会导致循环导入。但是,由于我的经理正在创建模型并添加一些额外的属性,因此该方法的类型提示是模型实例。我无法修复该类型提示,因为它尚未导入。
# models.py
from .managers import PublishedBundleManager
class PublishedBundle(models.Model):
data = JSONField()
md5_checksum = models.CharField(max_length=128)
objects = PublishedBundleManager()
管理器提供了一种帮助我创建模型实例的方法,但为方便起见,计算了要在创建过程中填写的校验和。为了解决循环导入问题,我使用了type.TYPE_CHECKING
# 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)
但是,我遇到2个错误。
-
Missing type parameters for generic type "Manager" [type-arg]mypy(error)
- 未定义名称'PublishedBundle'
我对python型很陌生,以前从未遇到过这个问题。我知道发生2的原因是尚未定义PublishedBundle
,但我无法定义它,因为它会引起循环导入。有人可以帮我吗?
解决方法
解决此问题的一种简单方法是将管理器和模型放在同一文件中。无论如何,它们之间有着千丝万缕的联系。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。