Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将django模型移动到它们自己的文件中_Python_Django_Orm_Model - Fatal编程技术网

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开始,您不再需要担心元类,因为这已经得到了修复。