2009-09-16 15 views
4

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

这两个“被忽略”应用程序的独特之处在于模型文件从另外两个应用程序导入模型并将它们用作外键(不知道这是好还是坏的做法,但可以帮助我保持有组织)。我认为这不是问题,因为我评论说外键模型和表格还没有创建。我很难过。

更新:当我注释掉从其他应用程序导入模型文件的行时,syndb创建我的表。也许我并不了解有关独立应用中的模型文件如何与其他应用程序相关的内容。我虽然可以通过简单地导入将其他应用中的模型用作外键。不对?

+1

如果您针对相关应用程序运行manage.py sqlall [appname],是否会得到任何输出? – 2009-09-16 21:20:54

+0

好问题 - 不,我没有得到任何输出。但是,如果我更改应用程序文件夹的名称并运行syncd,则会收到错误消息,指出无法找到已更改的应用程序。 – twneale 2009-09-16 21:22:17

回答

6

不幸的是,manage.py默默无法加载其models.py(ticket #10706)中存在导入错误的应用程序。机会之一是你的models.py文件中有一个输入错误...仔细检查所有输入语句(或使用pylint)。

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

+0

这应该是,并且被认为是Django中的一个错误:http://code.djangoproject.com/ticket/10706 – 2009-09-17 04:42:11

+2

哈 - 我有同样的问题再次,谷歌搜索它,并找到了相同的答案。 – twneale 2010-05-17 15:36:08

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

相关问题