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 个回答
看起来你的 db
模块没有在设置中的 INSTALLED_APPS
列表里。这个信息对其他情况来说不够详细。
你需要在你的模型的内部类中添加 app_label = 'db'
这一行。
根据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的文档:http://docs.djangoproject.com/en/dev/ref/models/options/#app-label