2013-12-15 79 views
0

这驱使我疯了......我用以下结构重组现有的Django项目挣扎:Django的执行syncdb

[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' 
) 

每个模型类都有一个元类,如:

class Meta: 
    app_label=[app] # this points to the top level above [core] 

[app][core]和后续[app]目录中有一个__init__.py文件。

当我运行syncdb,它简单地忽略了[core]下我的应用程序但是,对于其他应用程序,如tastypiesouth表得到正确创建。

当我运行manage.py validate返回0发现错误

我可能已经阅读有关syncdb但不幸的是无济于事的主题的所有帖子和提示。我显然失去了一些东西,但无法弄清楚它是什么....

+0

我相信每个安装的应用程序都需要唯一的应用程序标签。你是否尝试过让它们成为'app1','app2'等,而不是'app'? – jproffitt

+0

刚刚尝试过,但不幸的是它没有区别...感谢您的建议。 – Roger

+0

在Meta中使用'[app]'是不是很清楚?它是否添加到已安装的应用程序它是否conatin'model.py'文件,可能是空的?你可以尝试添加空的'model.py'到核心文件夹,使其成为django应用程序,并将其添加到已安装的应用程序? – alko

回答

1

我不能完全理解其中[app]在模型Meta设置,但要注意,Django的syncdb使用django.db.models.get_apps找到项目的申请。从INSTALLED_APPS后者interspects的应用程序,并explicetely尝试加载应用程序models模块

models = import_module('.models', app_name) 

所以外INSTALLED_APPS应用程序不会有同步的表。

其次,Django会加载所有与django.db.models.get_apps每个模型中发现的应用程序,后者反过来内省AppCache.apps_models(即缓存,据我记得,通过模型构建与register_models填充)。因此所有对应于有效应用程序的导入模型都将被处理。

我想你必须确保[app]models._Meta

  • 包含models.py(可能为空),这将使其成为一个Django应用程序;
  • INSTALLED_APPS中被提及,可以用get_apps功能来声明。