syncdb忽略导入的模型

时间:2011-04-14 11:09:25

标签: python django-models django-syncdb

我有一个项目,结构如下:

project/
   __init__.py
   db/
      models/
         __init__.py
         article.py
         project.py
         ontology/
            __init__.py
            coded.py

它有点大,但这就是主意。 models.__init__.py包含:

from db.models.article import *
from db.models.project import *
from db.models.ontology.coded import *

运行syncdb时,它会忽略models.__init__.py中导入的所有模型。没有ImportError,并且在向__init__.py添加打印语句时,它会愉快地打印导入模型(在运行syncdb时)。

__init__.py中的模型已定义

为什么?我可以强制syncdb来考虑导入的模型吗?

编辑:INSTALLED_APPS中的应用程序

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'amcatnavigator.navigator',
'amcatnavigator.db',
)

谢谢!

3 个答案:

答案 0 :(得分:4)

您需要将app_label = 'db'添加到模型的Meta内部类中。

答案 1 :(得分:3)

根据South(syncdb)文档:http://south.aeracode.org/docs/tutorial/part1.html它将仅为settings.py文件中INSTALLED_APPS部分中的那些模型创建表。如果正在使用模型,但它已更改并且您不想丢失任何数据 - 请使用迁移:http://south.aeracode.org/docs/tutorial/part1.html#the-first-migration

更新:据我所知,Django设计不会在不同的目录中找到模型:http://code.djangoproject.com/ticket/14007你可能想要使用app_label

更新:app_label docs:http://docs.djangoproject.com/en/dev/ref/models/options/#app-label

答案 2 :(得分:0)

您的db模块似乎未包含在您设置的INSTALLED_APPS列表中。对于其他变种来说,这还不够。