Django使用create table测试失败

时间:2014-09-04 07:20:50

标签: django unit-testing

我无法再在Django中运行测试了。当我尝试按照./manage.py test core运行它们时,我收到以下错误:

  ...
  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()而失败了。然后它无法继续,因为该表不存在。有什么我做错了吗?该代码在正常运行时运行良好。

1 个答案:

答案 0 :(得分:1)

问题(如果我的通灵调试是正确的)是定义management_map字段的代码在创建Management表之前执行。所以 Management.objects.all()方法抛出异常。

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

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