2014-09-04 57 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