如何在Django中创建一个模型包

时间:2018-04-07 23:12:06

标签: python django

拥有一个非常大的models.py文件(包含多个模型),我试图重构,每个文件只有一个模型。

因此,我尝试使用以下结构创建models包:

  • app/models/__init__.py
  • app/models/first_model.py
  • app/models/second_model.py

不幸的是,我无法让Django懒惰的引用机制运行良好,即:

first_model = models.ForeignKey('app.FirstModel')

返回Django无法找到模型的错误。

有什么想法吗?谢谢!

3 个答案:

答案 0 :(得分:1)

它应该有效,请确保在__init__.py中从first_model.py和second_model.py导入所有模型。

from .first_model import FirstModel
from .second_model import SecondModel

编辑:如果您要将模型检索为' app_label.model_name',则必须在__init__.py中导入它们,否则您可以尝试以下操作:

使用https://docs.djangoproject.com/en/2.0/ref/applications/#django.apps.apps.get_model

或者您可以使用ContentTypes:https://docs.djangoproject.com/en/2.0/ref/contrib/contenttypes/#methods-on-contenttype-instances

答案 1 :(得分:0)

Cookbook中有一个例子,只使用类(模型)的名称,而不是app部分:

first_model = models.ForeignKey('FirstModel')

答案 2 :(得分:0)

__init__.py的存在告诉Python将其视为一个包,但是为了让Django找到你的模型用于迁移并找到它,你应该在__init__.py <中导入所有模型的东西/ p>

保持结构:

app/models/__init__.py
app/models/first_model.py
app/models/second_model.py

<强> __初始化__。PY

from .first_models import *
from .second_models import *