苦苦挣扎的Django syncdb

时间:2013-12-15 19:46:09

标签: python django django-models

这让我很生气...我正在使用以下结构重新组织现有的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]下的我的应用,但是tastypiesouth等其他应用的表格会正确创建。

当我运行manage.py validate时,它返回0错误

我已经阅读了与syncdb相关主题的所有帖子和提示,但遗憾的是无济于事。我显然错过了一些东西,但无法弄清楚它是什么......

1 个答案:

答案 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函数来确定。