这让我很生气...我正在使用以下结构重新组织现有的Django项目:
[project_abc]
[app]
[core]
[app1]
admin.py
models.py
...
[app2]
admin.py
models.py
...
... etc ... there's a total of 9 apps
[rest]
... rest api stuff, non-db related ...
[mobile]
... mobile stuff, non-db related ...
[
south
tastypie
[project_abc]
settings.py
urls.py
manage.py
所有需要数据库访问权限的模型的应用都已添加到settings.py
:
INSTALLED_APPS = (
'django.contrib.admin',
'[app].[core].[app1]',
'[app].[core].[app2]',
...
'tastypie',
'south'
)
每个模型类都有一个Meta类,如:
class Meta:
app_label=[app] # this points to the top level above [core]
目录[app]
,[core]
和后续[app]
目录中包含__init__.py
个文件。
当我运行syncdb
时,很高兴忽略[core]
下的我的应用,但是tastypie
和south
等其他应用的表格会正确创建。
当我运行manage.py validate
时,它返回0错误
我已经阅读了与syncdb
相关主题的所有帖子和提示,但遗憾的是无济于事。我显然错过了一些东西,但无法弄清楚它是什么......
答案 0 :(得分:1)
我无法完全理解模型[app]
中设置的Meta
,但请注意django syncdb
使用django.db.models.get_apps
来查找项目的应用程序。后者介绍来自INSTALLED_APPS的应用程序,并试图加载应用程序'models
模块
models = import_module('.models', app_name)
因此,INSTALLED_APPS
之外的应用程序不会同步表。
其次,django为每个找到的应用程序加载django.db.models.get_apps
的所有模型,后者转向内省AppCache.apps_models
(据我记忆,该缓存按模型填充register_models
构造函数)。因此,处理与有效应用程序对应的所有导入模型。
我猜您必须确保来自[app]
的{{1}}:
models._Meta
(可能为空),这将使其成为django应用程序; models.py
中提到了INSTALLED_APPS
函数来确定。