15

为了将我的模型放在子文件夹中,我尝试使用此处描述的 app_label Meta 字段。

我的目录结构如下所示:

  • 项目
    • 应用
        • 楷模
          • __init__.py
          • bar_model.py

在 bar_model.py 我这样定义我的模型:

from django.db import models

class SomeModel(models.Model):

    field = models.TextField()

    class Meta:
        app_label = "foo"

我可以像这样成功导入模型:

from apps.foo.models.bar_model import SomeModel

但是,运行:

./manage.py syncdb

不为模型创建表。但是,在详细模式下,我确实看到应用程序“foo”被正确识别(它位于 settings.py 的 INSTALLED_APPS 中)。将模型移动到 foo 下的 models.py 确实有效。

是否有一些特定的约定没有记录在 app_label 或整个机制中以防止该模型结构被 syncdb 识别?

4

3 回答 3

21

请参阅 Django 票证#10985:解释如何在目录中组织模型

可能是您没有将模型导入到__init__.py?

于 2010-03-19T21:15:27.187 回答
3

syncdb不会为不在 中的模型创建表<appname>.models,因此将其导入其中,例如from apps.foo.models import SomeModel

于 2010-03-19T19:51:24.933 回答
0

如果您有较新版本的 Django,假设您有一个名为的子文件夹,这是一个解决方案subfolder

apps.py您的文件夹应用程序中:

from django.apps import AppConfig

class MyappConfig(AppConfig):
    name = 'myapp'

    def ready(self):
        from myapp.subfolder import models
于 2019-11-26T05:16:50.963 回答