为了将我的模型放在子文件夹中,我尝试使用app_label元字段,如here所述。
我的目录结构如下所示:
在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识别这个模型结构?
答案 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