【问题标题】:manage.py syncdb doesn't add tables for some modelsmanage.py syncdb 不为某些模型添加表
【发布时间】:2009-09-16 21:17:42
【问题描述】:

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

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

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

【问题讨论】:

  • 如果你对有问题的应用程序运行 manage.py sqlall [appname],你会得到任何输出吗?
  • 好问题——不,我没有得到任何输出。但是,如果我更改应用程序文件夹的名称并运行 syncd,则会收到一条错误消息,指出无法找到更改后的应用程序。

标签: python django django-models django-syncdb


【解决方案1】:

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

我遇到了一个模型没有被重置的问题。 在这种情况下,事实证明我的模型中有一个错误没有被吐出。

虽然我认为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 上遇到错误。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 这应该被认为是 Django 中的一个错误:code.djangoproject.com/ticket/10706
    • 哈哈,我又遇到了同样的问题,用谷歌搜索,找到了同样的答案。
    猜你喜欢
    • 2014-06-07
    • 1970-01-01
    • 2011-08-04
    • 2014-05-17
    • 2015-07-31
    • 2011-02-13
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    相关资源
    最近更新 更多