#26743: DeserializationError local variable 'pk' referenced before assignment
(which hides real error)
--------------------------------------+--------------------
     Reporter:  lakinwecker           |      Owner:  nobody
         Type:  Bug                   |     Status:  new
    Component:  Core (Serialization)  |    Version:  1.9
     Severity:  Normal                |   Keywords:
 Triage Stage:  Unreviewed            |  Has patch:  0
Easy pickings:  0                     |      UI/UX:  0
--------------------------------------+--------------------
 The first error is this:
 {{{
 Environment:


 Request Method: GET
 Request URL:
 http://localhost:8000/admin/artcollection/artobject/2298/history/734/

 Django Version: 1.9.6
 Python Version: 2.7.10
 Installed Applications:
 ['saskartsboard.artcollection',
  'saskartsboard.options',
  'saskartsboard.descriptive_and_visual_dictionary',
  'grappelli',
  'versatileimagefield',
  'select2',
  'ckeditor',
  'django.contrib.admin',
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.messages',
  'django.contrib.staticfiles',
  'reversion']
 Installed Middleware:
 ['django.middleware.security.SecurityMiddleware',
  'django.contrib.sessions.middleware.SessionMiddleware',
  'django.middleware.common.CommonMiddleware',
  'django.middleware.csrf.CsrfViewMiddleware',
  'django.contrib.auth.middleware.AuthenticationMiddleware',
  'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
  'django.contrib.messages.middleware.MessageMiddleware',
  'django.middleware.clickjacking.XFrameOptionsMiddleware']



 Traceback:

 File "/media/mausoleum/Work/Development/saskartsboard-
 collections/env/local/lib/python2.7/site-
 packages/django/core/handlers/base.py" in get_response
   149.                     response =
 self.process_exception_by_middleware(e, request)

 File "/media/mausoleum/Work/Development/saskartsboard-
 collections/env/local/lib/python2.7/site-
 packages/django/core/handlers/base.py" in get_response
   147.                     response = wrapped_callback(request,
 *callback_args, **callback_kwargs)

 File "/media/mausoleum/Work/Development/saskartsboard-
 collections/env/local/lib/python2.7/site-
 packages/django/utils/decorators.py" in _wrapped_view
   149.                     response = view_func(request, *args, **kwargs)

 File "/media/mausoleum/Work/Development/saskartsboard-
 collections/env/local/lib/python2.7/site-
 packages/django/views/decorators/cache.py" in _wrapped_view_func
   57.         response = view_func(request, *args, **kwargs)

 File "/media/mausoleum/Work/Development/saskartsboard-
 collections/env/local/lib/python2.7/site-
 packages/django/contrib/admin/sites.py" in inner
   244.             return view(request, *args, **kwargs)

 File "/media/mausoleum/Work/Development/saskartsboard-
 collections/env/local/lib/python2.7/site-packages/reversion/admin.py" in
 revision_view
   228.         return self.revisionform_view(request, version,
 self.revision_form_template or
 self._get_template_list("revision_form.html"), context)

 File "/media/mausoleum/Work/Development/saskartsboard-
 collections/env/local/lib/python2.7/site-packages/reversion/admin.py" in
 revisionform_view
   191.                 version.revision.revert(delete=True)

 File "/media/mausoleum/Work/Development/saskartsboard-
 collections/env/local/lib/python2.7/site-packages/reversion/models.py" in
 revert
   92.         safe_revert(version_set)

 File "/media/mausoleum/Work/Development/saskartsboard-
 collections/env/local/lib/python2.7/site-packages/reversion/models.py" in
 safe_revert
   31.                 version.revert()

 File "/media/mausoleum/Work/Development/saskartsboard-
 collections/env/local/lib/python2.7/site-packages/reversion/models.py" in
 revert
   207.         self.object_version.save()

 File "/media/mausoleum/Work/Development/saskartsboard-
 collections/env/local/lib/python2.7/site-packages/reversion/models.py" in
 object_version
   168.         return list(serializers.deserialize(self.format, data,
 ignorenonexistent=True))[0]

 File "/media/mausoleum/Work/Development/saskartsboard-
 collections/env/local/lib/python2.7/site-
 packages/django/core/serializers/json.py" in Deserializer
   85.         six.reraise(DeserializationError, DeserializationError(e),
 sys.exc_info()[2])

 File "/media/mausoleum/Work/Development/saskartsboard-
 collections/env/local/lib/python2.7/site-
 packages/django/core/serializers/json.py" in Deserializer
   79.         for obj in PythonDeserializer(objects, **options):

 File "/media/mausoleum/Work/Development/saskartsboard-
 collections/env/local/lib/python2.7/site-
 packages/django/core/serializers/python.py" in Deserializer
   142.                     raise base.DeserializationError.WithData(e,
 d['model'], d.get('pk'), pk)

 Exception Type: DeserializationError at
 /admin/artcollection/artobject/2298/history/734/
 Exception Value: local variable 'pk' referenced before assignment
 }}}

 Which is caused by referring to the 'pk' variable on line 142, which is
 only set in the first iteration of the for loop on line 139.  If you add a
 {{{raise}}} before line 142 you can see the real exception which is:

 {{{
 Environment:


 Request Method: GET
 Request URL:
 http://localhost:8000/admin/artcollection/artobject/2298/history/734/

 Django Version: 1.9.6
 Python Version: 2.7.10
 Installed Applications:
 ['saskartsboard.artcollection',
  'saskartsboard.options',
  'saskartsboard.descriptive_and_visual_dictionary',
  'grappelli',
  'versatileimagefield',
  'select2',
  'ckeditor',
  'django.contrib.admin',
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.messages',
  'django.contrib.staticfiles',
  'reversion']
 Installed Middleware:
 ['django.middleware.security.SecurityMiddleware',
  'django.contrib.sessions.middleware.SessionMiddleware',
  'django.middleware.common.CommonMiddleware',
  'django.middleware.csrf.CsrfViewMiddleware',
  'django.contrib.auth.middleware.AuthenticationMiddleware',
  'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
  'django.contrib.messages.middleware.MessageMiddleware',
  'django.middleware.clickjacking.XFrameOptionsMiddleware']



 Traceback:

 File "/media/mausoleum/Work/Development/saskartsboard-
 collections/env/local/lib/python2.7/site-
 packages/django/core/handlers/base.py" in get_response
   149.                     response =
 self.process_exception_by_middleware(e, request)

 File "/media/mausoleum/Work/Development/saskartsboard-
 collections/env/local/lib/python2.7/site-
 packages/django/core/handlers/base.py" in get_response
   147.                     response = wrapped_callback(request,
 *callback_args, **callback_kwargs)

 File "/media/mausoleum/Work/Development/saskartsboard-
 collections/env/local/lib/python2.7/site-
 packages/django/utils/decorators.py" in _wrapped_view
   149.                     response = view_func(request, *args, **kwargs)

 File "/media/mausoleum/Work/Development/saskartsboard-
 collections/env/local/lib/python2.7/site-
 packages/django/views/decorators/cache.py" in _wrapped_view_func
   57.         response = view_func(request, *args, **kwargs)

 File "/media/mausoleum/Work/Development/saskartsboard-
 collections/env/local/lib/python2.7/site-
 packages/django/contrib/admin/sites.py" in inner
   244.             return view(request, *args, **kwargs)

 File "/media/mausoleum/Work/Development/saskartsboard-
 collections/env/local/lib/python2.7/site-packages/reversion/admin.py" in
 revision_view
   228.         return self.revisionform_view(request, version,
 self.revision_form_template or
 self._get_template_list("revision_form.html"), context)

 File "/media/mausoleum/Work/Development/saskartsboard-
 collections/env/local/lib/python2.7/site-packages/reversion/admin.py" in
 revisionform_view
   191.                 version.revision.revert(delete=True)

 File "/media/mausoleum/Work/Development/saskartsboard-
 collections/env/local/lib/python2.7/site-packages/reversion/models.py" in
 revert
   92.         safe_revert(version_set)

 File "/media/mausoleum/Work/Development/saskartsboard-
 collections/env/local/lib/python2.7/site-packages/reversion/models.py" in
 safe_revert
   31.                 version.revert()

 File "/media/mausoleum/Work/Development/saskartsboard-
 collections/env/local/lib/python2.7/site-packages/reversion/models.py" in
 revert
   207.         self.object_version.save()

 File "/media/mausoleum/Work/Development/saskartsboard-
 collections/env/local/lib/python2.7/site-packages/reversion/models.py" in
 object_version
   168.         return list(serializers.deserialize(self.format, data,
 ignorenonexistent=True))[0]

 File "/media/mausoleum/Work/Development/saskartsboard-
 collections/env/local/lib/python2.7/site-
 packages/django/core/serializers/json.py" in Deserializer
   85.         six.reraise(DeserializationError, DeserializationError(e),
 sys.exc_info()[2])

 File "/media/mausoleum/Work/Development/saskartsboard-
 collections/env/local/lib/python2.7/site-
 packages/django/core/serializers/json.py" in Deserializer
   79.         for obj in PythonDeserializer(objects, **options):

 File "/media/mausoleum/Work/Development/saskartsboard-
 collections/env/local/lib/python2.7/site-
 packages/django/core/serializers/python.py" in Deserializer
   139.                     for pk in field_value:

 Exception Type: DeserializationError at
 /admin/artcollection/artobject/2298/history/734/
 Exception Value: 'NoneType' object is not iterable
 }}}

 Which is caused by not dealing with None values. I'm not exactly certain
 why the None value is set for this field value, but it is.

 My best guess at this point is that this field used to be a ForeignKey but
 has been migrated  migrated into a ManyToMany and when the object was
 first saved, the FK was None, but now the ManyToMany is empty.

 If you believe this is an issue with django reversion, I will happily move
 it there, but I'm not so sure.

 Changing line 139 to:

 {{{ for pk in field_value or []: }}}

 Seems to get around the error.

--
Ticket URL: <https://code.djangoproject.com/ticket/26743>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/054.b938a021941ad6e7ff59d130cbdc52ad%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to