你在app 的models.py 文件中定义模型。这意味着您存储模型类的模块 是app.models。因此导入内容为:
from app.models import MyModel
本质上,Django 与此无关:这是 Python 从这些模块加载模块和类的方式。
然而,Django 会加载 - 例如,当您运行服务器时 - 位于设置文件的 INSTALLED_APPS 列表中的应用程序(通常是 settings.py),因此会在它存储 Django 模型的地方构造一个“寄存器”,它以统一的方式命名它们:app_name.ModelName。这里没有理由指定models,因为模型是在models.py 中定义的,因此只会引入“噪音”。
您可以使用apps.get_model [Django-doc]获取对模型类的引用
from django.apps import apps
apps.get_model('app_name', 'ModelName')
然后它检查已加载模型的寄存器,并返回对模型的引用。
当存在循环引用时,通过字符串进行链接很有用(有时是必需的)。例如,如果您有两个模型 A 和 B,而 A 指的是 BandBthroughA(for example withForeignKeys), then one of the two models is defined first. This means that if you defineAfirst, it can not refer to theB` 类本身,因为那时它还不存在。在 Django 中,然后通过字符串指定模型。然后 Django 系统将首先加载模型,然后“打结”:通过将字符串替换为对实际模型类的引用来解析引用。