Django在使用syncdb命令时如何跳过应用程序

时间:2011-04-25 00:38:58

标签: django syncdb

我有一个Django项目,它有两个应用程序(一个作为调试测试创建)。对于调试测试,syncdb确实将模型放在数据库中,但对于另一个则没有。

  • 两者都在settings.INSTALLED_APPS
  • 大约有七种型号,没有一种可以识别。
  • 服务器,任何页面或syncdb-console都不会出错。
  • 模型位于models directory。作为测试,app / models.py中也有一个(也不起作用)。
  • 最引人注目的是,下面code会显示未同步的模型(从跳过的应用程序执行):
for model in get_models():  
    models.append(model)  
pass models to a template  

非常感谢任何帮助。我认为这是微不足道的事情,但我想要尝试的事情。

谢谢,

更新:

INSTALLED_APPS = (  
    'django.contrib.auth',  
    'django.contrib.contenttypes',  
    'django.contrib.sessions',  
    'django.contrib.messages',  
    'django.contrib.admin',  
    'techtree',  
    'froink',  
)

结构:

  • project/techtree/models.py(包含测试模型)
  • project/techtree/models/__init__.py(如here所述)
  • project/techtree/models/typ.py(包含型号类型)

有更多与最后一行相同类型的文件。

4 个答案:

答案 0 :(得分:2)

您是否遗漏了第二个应用的模型目录中的__init__.py文件?这意味着它无法在路径上找到。

您能告诉我们您的INSTALLED_APPS设置以及您的目录结构吗?

看看你的目录结构,我想我猜错了。

my_app/
    __init__.py
    my_module.py
    my_module/
        __init__.py
        my_python_file.py

使用上述虚构的目录结构,当我执行以下操作时会导入什么内容?

from my_module import *

是否导入my_module.py内的所有内容或my_module目录中的所有内容?

使用一个或另一个。不是都。将所有内容放在models.py文件中,除非您有充足的理由拥有models目录,否则请删除该目录。你可能没有。

答案 1 :(得分:2)

我遇到了同样的问题,我花了好几个小时才弄清楚如何将模型分组到一个单独的目录中。继承人怎么做,

使用app_label参数为每个模型添加元类。

from django.db import models

class Test(models.Model):
    class Meta:
        app_label = 'myapp'

这是我发现这个的地方, Placing Django Models In Separate Files

但是这样做还不够,你必须在模型目录中的__init__.py文件中导入模型,如下所示,

from YourModelFile import *

答案 2 :(得分:0)

Django通常只搜索models.py文件。如果您有models.py和名为models且带有__init__.py文件的模块子目录,则无法正确识别模型(我的猜测)。您可以执行以下两种操作之一:

  • 完全删除子模块,并将所有模型定义保留在models.py

OR

  • 移除models.py中的techtree。将models.py文件添加到您保留模型定义的techtree.models应用中。将'techtree.models'添加到INSTALLED_APPS(仅'techtree'是不够的。)

希望其中一个答案有所帮助。

答案 3 :(得分:0)

检查文件名是

__init__.py

而不是

init.py