通过app_label在子目录中建模?

时间:2010-03-19 19:28:38

标签: django django-models django-orm

为了将我的模型放在子文件夹中,我尝试使用app_label元字段,如here所述。

我的目录结构如下所示:

  • 项目
    • 应用
      • FOO
        • 模型
          • __初始化__。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识别这个模型结构?

3 个答案:

答案 0 :(得分:21)

请参阅Django票证#10985: Explain how models can be organised in a directory

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

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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

在文件夹应用的apps.py中:

from django.apps import AppConfig

class MyappConfig(AppConfig):
    name = 'myapp'

    def ready(self):
        from myapp.subfolder import models