2

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

  • 两者都在settings.INSTALLED_APPS
  • 大约有七个模型,没有一个被识别。
  • 服务器、任何页面或 syncdb-console 都不会给出任何错误。
  • 模型位于模型目录中。作为测试,app/models.py 中也有一个(也不起作用)。
  • 对我来说最引人注目的是下面的代码确实显示了未同步的模型(从被跳过的应用程序中执行):
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(如此所述)
  • project/techtree/models/typ.py(包含模型类型)

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

4

4 回答 4

2

我遇到了同样的问题,我花了几个小时才弄清楚如何将模型分组到一个单独的目录中。下面是如何做到这一点,

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

from django.db import models

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

这是我发现这一点的地方, 将 Django 模型放在单独的文件中

但是这样做还不够,您必须__init__.py像这样在模型目录中的文件中导入模型,

from YourModelFile import *
于 2011-05-20T10:38:36.000 回答
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目录。你可能不知道。

于 2011-04-25T00:41:50.950 回答
0

Django 通常只搜索models.py文件。如果您有一个用文件models.py调用的模块子目录,则它无法正确识别模型(我的猜测)。您可以执行以下两项之一:models__init__.py

  • 完全删除您的子模块并保留所有模型定义models.py

或者

  • models.py中删除techtree。将一个models.py文件添加到您的techtree.models应用程序中,您可以在其中保存模型定义。添加'techtree.models'到您的INSTALLED_APPS(只是'techtree'不够)。

希望这些答案之一有所帮助。

于 2011-04-25T01:09:52.810 回答
0

检查文件名是

__init__.py

并不是

初始化文件

于 2011-04-25T09:48:43.420 回答