将django模型移动到自己的文件中

时间:2012-02-16 21:33:50

标签: python django orm model

以可维护性的名义,我将一些较大的模型移动到他们自己的文件中。所以在我这之前:

app/
  models.py

现在我有了这个:

app/
  models/
    __init__.py
    model_a.py
    model_b.py

这很好用,但是当我使用manage.py来执行同步数据库时,它不再为这些模型创建表。

我忘记了什么吗?

谢谢,

2 个答案:

答案 0 :(得分:18)

必须在名为app.models的模块中找到模型,其中app是应用名称。所以你应该写app/models/__init__.py

 from model_a import * 
 from model_b import * 

在Django< 1.7

注意从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