Question

During my first attempt at using django-reversion, I was evaluating it to see if I can do certain basic version retrieval operations on my model:

I'm unable to retrieve a list of prior versions of specific model after saving a change to a specific field within scope of reversion as shown below. I get the following error in stack trace when attempting a reversion.get_for_object():

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

Django: v1.3.1

django-reversion: v1.5.7

Installed django-reversion and managed a syncdb successfully:

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.

Added reversion specific settings in settings.py:

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 snippet:

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)

stack trace:

>>> 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")

Am I using reversion correctly here? By running "reversion.get_for_object(tm)" I'm expecting to see a list containing at least the last saved version when issuing "tm.save()" in previous step.

Not sure if this error is specific to reversion handling as I'm able to commit changes to models I would normally without using reversion. Thanks in advance.

Was it helpful?

Solution

Your django_content_type table doesn't exist because django.contrib.contenttypes is commented out in your INSTALLED_APPS. Uncomment it (remove the #) and run syncdb again.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top