2013-07-28 74 views
0

在我第一次嘗試使用django-reversion時,我正在評估它是否可以對某些基本版本檢索操作進行評估我的模型:django-reversion:get_for_object()拋出數據庫錯誤「'<db_name> .django_content_type'不存在」

如下所示,我無法在將更改保存到特定字段範圍內的特定模型之後檢索特定模型的先前版本的列表。

DatabaseError: (1146, "Table 'pvtestmatrix.django_content_type' doesn't exist") 

Django的:V1.3.1

Django的逆轉:v1.5.7

安裝的Django在嘗試reversion.get_for_object()當我在堆棧跟蹤以下錯誤-reversion併成功管理syncdb:

bash-3.2$ python manage.py syncdb 
Creating tables ... 
Creating table reversion_revision 
Creating table reversion_version 
Installing custom SQL ... 
Installing indexes ... 
No fixtures found. 

添加了反轉指定在settings.py C設置下:

INSTALLED_APPS = (
    # 'django.contrib.auth', 
    # 'django.contrib.contenttypes', 
    # 'django.contrib.sessions', 
    # 'django.contrib.sites', 
    # 'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'django.contrib.staticfiles', 
    'collabgrid.testmatrix', 
    'collabgrid.testcase', 
    'collabgrid.status', 
    'reversion', 
) 

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.transaction.TransactionMiddleware', 
    'reversion.middleware.RevisionMiddleware', 
) 

DATABASES = { 
'default': { 
    'ENGINE': 'django.db.backends.mysql', 
    'NAME': 'PVTestMatrix',      
...} 
} 

models.py:

... 
class Testmatrix(models.Model): 
    testmatrixid = models.AutoField(primary_key=True, db_column='TestMatrixId') 
    platform = models.CharField(max_length=60, db_column='Platform', blank=True) 
    ... 
    class Meta: 
     db_table = u'TestMatrix' 
    def __str__(self): 
     return '%s__%s__%s' % (self.productid, self.testmatrixid, self.owner) 
... 

view.py片段:

from collabgrid.testmatrix.models import Testmatrix 
import reversion 

reversion.register(Testmatrix) 
tm=Testmatrix.objects.get(pk=729) 
with reversion.create_revision(): 
    tm.platform="AAA" 
    tm.save() 

version_list = reversion.get_for_object(tm) 

堆棧跟蹤:

>>> from collabgrid.testmatrix.models import Testmatrix 
>>> import reversion 
>>> 
>>> reversion.register(Testmatrix) 
>>> tm=Testmatrix.objects.get(pk=729) 
>>> with reversion.create_revision(): 
...  tm.platform="AAA" 
...  tm.save() 
... 
Traceback (most recent call last): 
    File "<console>", line 3, in <module> 
    File "/Library/Python/2.6/site-packages/reversion/revisions.py", line 290, in __exit__ 
    self._context_manager.end() 
    File "/Library/Python/2.6/site-packages/reversion/revisions.py", line 176, in end 
    in manager_context.iteritems() 
    File "/Library/Python/2.6/site-packages/reversion/revisions.py", line 175, in <genexpr> 
    for obj, data 
    File "/Library/Python/2.6/site-packages/reversion/revisions.py", line 602, in <lambda> 
    version_data = lambda: adapter.get_version_data(instance, VERSION_CHANGE, self._revision_context_manager._db) 
    File "/Library/Python/2.6/site-packages/reversion/revisions.py", line 97, in get_version_data 
    content_type = ContentType.objects.db_manager(db).get_for_model(obj) 
    File "/Library/Python/2.6/site-packages/django/contrib/contenttypes/models.py", line 38, in get_for_model 
    defaults = {'name': smart_unicode(opts.verbose_name_raw)}, 
    File "/Library/Python/2.6/site-packages/django/db/models/manager.py", line 135, in get_or_create 
    return self.get_query_set().get_or_create(**kwargs) 
    File "/Library/Python/2.6/site-packages/django/db/models/query.py", line 378, in get_or_create 
    return self.get(**lookup), False 
    File "/Library/Python/2.6/site-packages/django/db/models/query.py", line 344, in get 
    num = len(clone) 
    File "/Library/Python/2.6/site-packages/django/db/models/query.py", line 82, in __len__ 
    self._result_cache = list(self.iterator()) 
    File "/Library/Python/2.6/site-packages/django/db/models/query.py", line 273, in iterator 
    for row in compiler.results_iter(): 
    File "/Library/Python/2.6/site-packages/django/db/models/sql/compiler.py", line 680, in results_iter 
    for rows in self.execute_sql(MULTI): 
    File "/Library/Python/2.6/site-packages/django/db/models/sql/compiler.py", line 735, in execute_sql 
    cursor.execute(sql, params) 
    File "/Library/Python/2.6/site-packages/django/db/backends/util.py", line 34, in execute 
    return self.cursor.execute(sql, params) 
    File "/Library/Python/2.6/site-packages/django/db/backends/mysql/base.py", line 86, in execute 
    return self.cursor.execute(query, args) 
    File "/Library/Python/2.6/site-packages/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg/MySQLdb/cursors.py", line 174, in execute 
    self.errorhandler(self, exc, value) 
    File "/Library/Python/2.6/site-packages/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg/MySQLdb/connections.py", line 36, in defaulterrorhandler 
    raise errorclass, errorvalue 
DatabaseError: (1146, "Table 'pvtestmatrix.django_content_type' doesn't exist") 
>>> version_list = reversion.get_for_object(tm) 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/Library/Python/2.6/site-packages/reversion/revisions.py", line 527, in get_for_object 
    return self.get_for_object_reference(obj.__class__, obj.pk, db) 
    File "/Library/Python/2.6/site-packages/reversion/revisions.py", line 506, in get_for_object_reference 
    content_type = ContentType.objects.db_manager(db).get_for_model(model) 
    File "/Library/Python/2.6/site-packages/django/contrib/contenttypes/models.py", line 38, in get_for_model 
    defaults = {'name': smart_unicode(opts.verbose_name_raw)}, 
    File "/Library/Python/2.6/site-packages/django/db/models/manager.py", line 135, in get_or_create 
    return self.get_query_set().get_or_create(**kwargs) 
    File "/Library/Python/2.6/site-packages/django/db/models/query.py", line 378, in get_or_create 
    return self.get(**lookup), False 
    File "/Library/Python/2.6/site-packages/django/db/models/query.py", line 344, in get 
    num = len(clone) 
    File "/Library/Python/2.6/site-packages/django/db/models/query.py", line 82, in __len__ 
    self._result_cache = list(self.iterator()) 
    File "/Library/Python/2.6/site-packages/django/db/models/query.py", line 273, in iterator 
    for row in compiler.results_iter(): 
    File "/Library/Python/2.6/site-packages/django/db/models/sql/compiler.py", line 680, in results_iter 
    for rows in self.execute_sql(MULTI): 
    File "/Library/Python/2.6/site-packages/django/db/models/sql/compiler.py", line 735, in execute_sql 
    cursor.execute(sql, params) 
    File "/Library/Python/2.6/site-packages/django/db/backends/util.py", line 34, in execute 
    return self.cursor.execute(sql, params) 
    File "/Library/Python/2.6/site-packages/django/db/backends/mysql/base.py", line 86, in execute 
    return self.cursor.execute(query, args) 
    File "/Library/Python/2.6/site-packages/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg/MySQLdb/cursors.py", line 174, in execute 
    self.errorhandler(self, exc, value) 
    File "/Library/Python/2.6/site-packages/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg/MySQLdb/connections.py", line 36, in defaulterrorhandler 
    raise errorclass, errorvalue 
DatabaseError: (1146, "Table 'pvtestmatrix.django_content_type' doesn't exist") 

我使用在這裏正確反轉?通過運行「reversion.get_for_object(tm)」,我期望在上一步發佈「tm.save()」時看到至少包含上次保存的版本的列表。

不知道這個錯誤是否特定於返回處理,因爲我可以提交對模型的更改,我通常不使用返回。提前致謝。

回答

3

您的django_content_type表不存在,因爲django.contrib.contenttypes被註釋掉在您的INSTALLED_APPS中。取消註釋(刪除#)並再次運行syncdb。

+0

謝謝!修復它。看起來像推薦爲許多Django的捆綁應用程序(例如:管理應用程序)啓用內容類型。 – rajivRaja

相關問題