Python 将django模型移动到它们自己的文件中
以可维护性的名义,我将一些较大的模型移到了它们自己的文件中。所以在我做这个之前:Python 将django模型移动到它们自己的文件中,python,django,orm,model,Python,Django,Orm,Model,以可维护性的名义,我将一些较大的模型移到了它们自己的文件中。所以在我做这个之前: app/ models.py 现在我有了这个: app/ models/ __init__.py model_a.py model_b.py 这很好,但当我使用manage.py来执行sync db时,它不再为这些模型创建表 我忘了什么吗 谢谢,您需要将每个模型的Meta.app\u标签设置为它所属的应用程序名称,并确保它们是从models/\uuu init\uuuu.py导入
app/
models.py
现在我有了这个:
app/
models/
__init__.py
model_a.py
model_b.py
这很好,但当我使用manage.py来执行sync db时,它不再为这些模型创建表
我忘了什么吗
谢谢,您需要将每个模型的
Meta.app\u标签
设置为它所属的应用程序名称,并确保它们是从models/\uuu init\uuuu.py
导入的
您可以在此处查看更多详细信息:模型必须在名为
app.Models
的模块中找到,其中app
是一个应用程序名称。因此,您应该在app/models/\uuuu init\uuuu.py
文件中编写
from model_a import *
from model_b import *
在Django<1.7
注:从django 1.7开始,这不是必需的
此外——(这就是我的问题所在)您必须手动更新您的模型的app\u label
属性,因此写下:
__all__ = ["ModelA", "ModelA1"]
class ModelA(models.Model):
class Meta:
app_label = 'your_app'
如果没有它,django将错误地设置应用程序
如果你是一个来自model\u a import*的
是邪恶的玩家,你可以在所有模块中设置\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?最起码,我认为您需要从子模块导入实际的模型类(虽然这可能不是最复杂的方法)。导入*
,但这是可靠的,否则:我会争辩的。如果不分成子模块的话,所有的东西都会放在模型模块中——这样就不会有什么害处,而且在我在模型a中添加了新模型之后,我不想更改init.py(如果OP在每个文件中使用单个模型,这不会有害处——但我总是在子模块中有多个模型)。我知道import*通常是邪恶的,但在这种情况下最好使用它。如果不添加Meta/app_标签,失败的症状是什么?因为我使用的是Django 1.6,我自己也使用这种方法来分割模型,但不知道还有什么不起作用?不清楚我应该修改哪个init文件,一个在模块中还是一个在主项目目录中?从Django 1.7开始,您不再需要担心元类,因为这已经得到了修复。