将 django 模型移动到自己的文件中
以可维护性的名义,我将一些较大的模型移至它们自己的文件中。所以在我有这个之前:
app/
models.py
现在我有这个:
app/
models/
__init__.py
model_a.py
model_b.py
这工作正常,但是当我使用manage.py来执行同步数据库时,它不再为这些模型创建表。
我是不是忘记了什么?
谢谢,
In the name of maintainability, I moved some of my larger models to their own files. So before i had this:
app/
models.py
and now I have this:
app/
models/
__init__.py
model_a.py
model_b.py
This works fine, but when I use manage.py to do sync db, it doesn't create a table for these models anymore.
Am I forgetting something?
Thanks,
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
模型必须在名为
app.models
的模块中找到,其中app
是应用程序名称。所以你应该在app/models/__init__.py
文件中写入Django
app/models/__init__.py
文件中1.7注意,从 django 1.7 开始,这不是必需的。
此外 --- (这就是我遇到的问题)你必须手动更新模型的
app_label
属性,所以写:没有它应用程序将被 django 错误地设置。
如果您担心
from model_a import *
是邪恶的,您总是可以在所有模块中设置__all__
属性。Models must be found in module named
app.models
whereapp
is an app name. So you should write inapp/models/__init__.py
fileIn Django < 1.7
Note fron django 1.7 onwards this is not neccessary.
Moreover --- (that's what I had problem with) you will have to manually update
app_label
attribute for your models, so write:without it app will be set incorrectly by django.
If you are afreid that
from model_a import *
are evil you allways can set up__all__
attributes in all modules.您需要将每个模型的
Meta.app_label
设置为其所属的应用程序名称,并确保它们是从models/__init__.py
导入的。您可以在这里查看更多详细信息:https://code.djangoproject.com/wiki/CookBookSplitModelsToFiles
You need to set
Meta.app_label
for each of the models to the app name where it belongs and make sure they are imported frommodels/__init__.py
.You can have a look here for more details: https://code.djangoproject.com/wiki/CookBookSplitModelsToFiles