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

发布于 2025-01-05 23:53:51 字数 275 浏览 0 评论 0原文

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

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

_畞蕅 2025-01-12 23:53:51

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

 from model_a import * 
 from model_b import * 

Django app/models/__init__.py 文件中1.7

注意,从 django 1.7 开始,这不是必需的。

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

 __all__ = ["ModelA", "ModelA1"]

 class ModelA(models.Model):
      class Meta: 
          app_label = 'your_app'

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

如果您担心 from model_a import * 是邪恶的,您总是可以在所有模块中设置 __all__ 属性。

Models must be found in module named app.models where app is an app name. So you should write in app/models/__init__.py file

 from model_a import * 
 from model_b import * 

In 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:

 __all__ = ["ModelA", "ModelA1"]

 class ModelA(models.Model):
      class Meta: 
          app_label = 'your_app'

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.

花开柳相依 2025-01-12 23:53:51

您需要将每个模型的 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 from models/__init__.py.

You can have a look here for more details: https://code.djangoproject.com/wiki/CookBookSplitModelsToFiles

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文