Django 通过app_标签在子目录中的模型?

Django 通过app_标签在子目录中的模型?,django,django-models,django-orm,Django,Django Models,Django Orm,为了将我的模型放在子文件夹中,我尝试使用app_label元字段,如前所述 我的目录结构如下所示: from django.db import models class SomeModel(models.Model): field = models.TextField() class Meta: app_label = "foo" 计划 应用程序 福 模型 __初始值 bar_model.py 在bar_model.py中,我将我的模型

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

我的目录结构如下所示:

from django.db import models

class SomeModel(models.Model):

    field = models.TextField()

    class Meta:
        app_label = "foo"
  • 计划
    • 应用程序
        • 模型
          • __初始值
          • 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中已安装的应用程序中)。将模型移动到foo下的models.py是可行的


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

syncdb
不会为不在
中的模型创建表。模型
,因此将其导入其中,例如,从apps.foo.models导入一些模型

参见Django票证


可能是您没有将模型导入到
\uuu init\uuuuuupy

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

在文件夹app的
apps.py
中:

from django.apps import AppConfig

class MyappConfig(AppConfig):
    name = 'myapp'

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

不,那也不行,也就是说syncdb没有拾取某个模型。编辑:我现在意识到你指向的方向与Van Gale相同。我已将他的答案标记为正确答案,因为它还包含一个链接,指向有关app_label正确文档的讨论。谢谢!是 啊您需要将它们导入
\uuuu init\uuuuu.py
中,并通过模型的
Meta
类为它们提供一个
app\u标签。重要信息是,从@mustafa.0x添加的app\u标签必须与作为模块名提供的标签名称相同,否则将返回空OrderedDict()如果您在导入django.apps.apps后获取apps.get_app_config('app_label').models