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

Gor*_*oro 9 python django orm model

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

app/
  models.py
Run Code Online (Sandbox Code Playgroud)

现在我有了这个:

app/
  models/
    __init__.py
    model_a.py
    model_b.py
Run Code Online (Sandbox Code Playgroud)

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

我忘记了什么吗?

谢谢,

jb.*_*jb. 18

模型必须在名为app.modelswhere appapp is app name的模块中找到.所以你应该写入app/models/__init__.py文件

 from model_a import * 
 from model_b import * 
Run Code Online (Sandbox Code Playgroud)

在Django <1.7

注意fron django 1.7以后这不是必要的.

而且---(这就是我遇到的问题)你必须手动更新app_label模型的属性,所以写:

 __all__ = ["ModelA", "ModelA1"]

 class ModelA(models.Model):
      class Meta: 
          app_label = 'your_app'
Run Code Online (Sandbox Code Playgroud)

没有它应用程序将被django错误地设置.

如果你是from model_a import *邪恶的,那么你总是可以__all__在所有模块中设置属性.

  • 我会说.如果它没有拆分成子模块,这整个东西都会出现在模型模块中 - 所以它不会造成伤害,而且在我在model_a中添加新模型之后我宁愿不改变__init__.py(如果OP使用OTOH每个文件的单个模型它不会造成伤害---但我总是在子模块中有多个模型.我知道import*通常是邪恶的,但在这种情况下最好使用它. (2认同)

Jak*_*cil 9

您需要Meta.app_label为每个模型设置它所属的应用程序名称,并确保从中导入它们models/__init__.py.

您可以在这里查看更多详细信息:https://code.djangoproject.com/wiki/CookBookSplitModelsToFiles