manage.py syncdb不为某些模型添加表

时间:2009-09-16 21:17:42

标签: python django django-models django-syncdb

我当天的第二个不那么熟练的问题:我有一个包含四个已安装应用程序的django项目。当我运行manage.py syndb时,它只为其中两个创建表。据我所知,我的任何模型文件都没有问题,所有应用程序都在我的设置文件的INSTALLED_APPS中指定。 Manage.py syndb似乎忽略了我的两个应用程序。

两个“被忽略”的应用程序有一个独特之处是模型文件从其他两个应用程序导入模型并将它们用作外键(不知道这是好/坏的做法,但帮助我留下组织)。我不认为这是问题,因为我注释掉了具有外键功能的模型,而且表格仍未创建。我很难过。

更新:当我注释掉从其他应用程序导入模型文件的行时,syndb会创建我的表格。也许我不了解某些应用程序中的模型文件与其他应用程序的关系。我可以通过简单地导入它将其他应用程序中的模型用作外键。不是吗?

2 个答案:

答案 0 :(得分:8)

我想我遇到了类似的事情。

我遇到了一个没有重置模型的问题。 在这种情况下,我发现我的模型中有一个错误没有吐出来。

虽然我认为syncdb在运行时会吐出某种错误。

在任何情况下都尝试从shell导入模型文件,看看是否可以。

$ manage.py shell
>>> from myapp import models
>>>

如果文件中出现错误,则应将其指出。

根据您的更新,听起来您可能存在交叉导入问题。 而不是:

from app1.models import X

class ModelA(models.Model):
    fk = models.ForeignKey(X)

尝试:

class ModelA(models.Model):
    fk = models.ForeignKey("app1.X")

...虽然我认为你应该在syncdb上出错。

答案 1 :(得分:6)

不幸的是,在其models.py(ticket #10706)中存在导入错误的情况下,manage.py无法加载应用程序。有可能你的一个models.py文件中有一个拼写错误...仔细检查所有的import语句(或使用pylint)。

最近syncdb停止加载我的几个应用程序,而sqlall给了我错误“无法找到带有标签foo的应用程序”。不知道这有时意味着“发现带有标签foo的应用程序但由于引发了ImportError而无法加载”,我花了半个小时才意识到我试图导入'haslib'而不是'hashlib'中的一个我的models.py文件。