我无法再在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()
而失败了。然后它无法继续,因为该表不存在。有什么我做错了吗?该代码在正常运行时运行良好。
答案 0 :(得分:1)
问题(如果我的通灵调试是正确的)是定义management_map字段的代码在创建Management
表之前执行。所以
Management.objects.all()
方法抛出异常。
这不会对您的普通数据库造成问题,因为两个表都存在 - 但是我相信如果您删除了数据库并尝试再次执行syncdb,您将会遇到相同的错误。
在任何情况下,修复它的Q + D方法是确保在声明Management
字段时创建了management_map
表。尝试将Management
类定义放在源文件的顶部,它们位于不同的文件中,然后尝试重新排序导入。