4

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

这两个“被忽略”的应用程序的独特之处在于模型文件从其他两个应用程序导入模型并将它们用作外键(不知道这是否是好/坏的做法,但有助于我保持井井有条)。不过,我认为这不是问题,因为我注释掉了具有外键的模型,并且仍然没有创建表。我难住了。

更新:当我注释掉从其他应用程序导入模型文件的行时,syndb 会创建我的表。也许我不了解不同应用程序中的模型文件如何与其他应用程序相关联。我虽然可以通过简单地导入它来使用来自另一个应用程序的模型作为外键。不对?

4

2 回答 2

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上得到一个错误。

于 2009-09-16T22:06:55.797 回答
6

不幸的是,manage.py 无法加载在其 models.py 中存在导入错误的应用程序(票证 #10706)。您的一个models.py文件中可能有错字...仔细检查所有导入语句(或使用pylint)。

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

于 2009-09-16T23:26:28.287 回答