以可维护性的名义,我将一些较大的模型移动到他们自己的文件中。所以在我这之前:
app/
models.py
现在我有了这个:
app/
models/
__init__.py
model_a.py
model_b.py
这很好用,但是当我使用manage.py来执行同步数据库时,它不再为这些模型创建表。
我忘记了什么吗?
谢谢,
答案 0 :(得分:18)
必须在名为app.models
的模块中找到模型,其中app
是应用名称。所以你应该写app/models/__init__.py
档
from model_a import *
from model_b import *
注意从donang 1.7开始,这不是必要的。
此外---(这就是我遇到的问题)您必须手动更新模型的app_label
属性,所以写一下:
__all__ = ["ModelA", "ModelA1"]
class ModelA(models.Model):
class Meta:
app_label = 'your_app'
没有它app会被django错误地设置。
如果您认为from model_a import *
是邪恶的,那么您总是可以在所有模块中设置__all__
属性。
答案 1 :(得分:9)
您需要将每个模型的Meta.app_label
设置为其所属的应用名称,并确保它们是从models/__init__.py
导入的。
您可以在此处查看详细信息:https://code.djangoproject.com/wiki/CookBookSplitModelsToFiles