2014-09-04 55 views
0

我不能在Django中运行我的测试了。当我试图运行它们按./manage.py test core,我得到以下错误:Django测试失败,创建表

... 
    File "/usr/local/lib/python2.7/site-packages/django/db/models/query.py", line 96, in __iter__ 
    self._fetch_all() 
    File "/usr/local/lib/python2.7/site-packages/django/db/models/query.py", line 857, in _fetch_all 
    self._result_cache = list(self.iterator()) 
    File "/usr/local/lib/python2.7/site-packages/django/db/models/query.py", line 220, in iterator 
    for row in compiler.results_iter(): 
    File "/usr/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 713, in results_iter 
    for rows in self.execute_sql(MULTI): 
    File "/usr/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 786, in execute_sql 
    cursor.execute(sql, params) 
    File "/usr/local/lib/python2.7/site-packages/django/db/backends/util.py", line 53, in execute 
    return self.cursor.execute(sql, params) 
    File "/usr/local/lib/python2.7/site-packages/django/db/utils.py", line 99, in __exit__ 
    six.reraise(dj_exc_type, dj_exc_value, traceback) 
    File "/usr/local/lib/python2.7/site-packages/django/db/backends/util.py", line 53, in execute 
    return self.cursor.execute(sql, params) 
    File "/usr/local/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py", line 451, in execute 
    return Database.Cursor.execute(self, query, params) 
django.db.utils.OperationalError: no such table: core_management 

它使没有在该行,但是,它在运行测试时,通常会创建这些表。有什么我做错了吗?我无法分辨为什么我的测试最近才开始失败。

编辑

我注意到,这与上一个M2M领域的消息出现故障:

management_map = models.ManyToManyField(Management, default=[t.pk for t in Management.objects.all()] 

我有一个模型Object,它的失败,因为Management.objects.all()的。然后它不能继续,因为表不存在。有什么我做错了吗?代码在正常运行时工作正常。

+0

看起来像db不存在。你有没有完成syncdb/migrations? – ChillarAnand 2014-09-04 07:28:06

+0

它存在了......我在创建'test_db'时运行它。 – KVISH 2014-09-04 07:31:38

回答

1

问题(如果我的心理调试是正确的)是定义管理映射字段的代码在之前执行,Management表已被创建。所以 Management.objects.all()方法抛出一个异常。

这不会在普通数据库中造成问题,因为这两个表都存在 - 但是我相信如果您删除数据库并尝试再次执行syncdb,则会遇到同样的错误。

在任何情况下,修复它的Q + D方法是确保在声明management_map字段时已创建Management表。尝试将Management类定义放在源文件的顶部,它们位于不同的文件中,然后尝试重新排序导入。

+0

你说得对,那是原因。但解决方案没有奏效。我已经在顶部有'管理'模型。要解决这个问题,我只需在'save'方法中检查M2M的'count'并相应地设置。如果'count = 0',那么我将它设置为默认值。 – KVISH 2014-09-04 19:24:05