Skip to content

UnboundLocalError at /cms/home/venue/reorder/3/: local variable 'update_value' referenced before assignment #38

Description

@janbaykara

Some details, and debugging comments and solution questions at the bottom of the OP:

Packages

wagtail-orderable 1.1.0
wagtail 3.0.3
django 4.0.7

Full stack error

[08/Sep/2022 16:00:25] "GET /cms/home/venue/reorder/3/?after=2 HTTP/1.1" 500 74627
Internal Server Error: /cms/home/venue/reorder/3/
Traceback (most recent call last):
  File "/home/vscode/.local/share/virtualenvs/workspace-dqq3IVyd/lib/python3.9/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
  File "/home/vscode/.local/share/virtualenvs/workspace-dqq3IVyd/lib/python3.9/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/vscode/.local/share/virtualenvs/workspace-dqq3IVyd/lib/python3.9/site-packages/django/views/decorators/cache.py", line 62, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "/home/vscode/.local/share/virtualenvs/workspace-dqq3IVyd/lib/python3.9/site-packages/wagtail/admin/urls/__init__.py", line 161, in wrapper
    return view_func(request, *args, **kwargs)
  File "/home/vscode/.local/share/virtualenvs/workspace-dqq3IVyd/lib/python3.9/site-packages/wagtail/admin/auth.py", line 182, in decorated_view
    response = view_func(request, *args, **kwargs)
  File "/usr/local/lib/python3.9/contextlib.py", line 79, in inner
    return func(*args, **kwds)
  File "/home/vscode/.local/share/virtualenvs/workspace-dqq3IVyd/lib/python3.9/site-packages/wagtailorderable/modeladmin/mixins.py", line 196, in reorder_view
    qs.update(**{self.sort_order_field: update_value})
UnboundLocalError: local variable 'update_value' referenced before assignment
Internal Server Error: /cms/home/venue/reorder/3/
Traceback (most recent call last):
  File "/home/vscode/.local/share/virtualenvs/workspace-dqq3IVyd/lib/python3.9/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
  File "/home/vscode/.local/share/virtualenvs/workspace-dqq3IVyd/lib/python3.9/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/vscode/.local/share/virtualenvs/workspace-dqq3IVyd/lib/python3.9/site-packages/django/views/decorators/cache.py", line 62, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "/home/vscode/.local/share/virtualenvs/workspace-dqq3IVyd/lib/python3.9/site-packages/wagtail/admin/urls/__init__.py", line 161, in wrapper
    return view_func(request, *args, **kwargs)
  File "/home/vscode/.local/share/virtualenvs/workspace-dqq3IVyd/lib/python3.9/site-packages/wagtail/admin/auth.py", line 182, in decorated_view
    response = view_func(request, *args, **kwargs)
  File "/usr/local/lib/python3.9/contextlib.py", line 79, in inner
    return func(*args, **kwds)
  File "/home/vscode/.local/share/virtualenvs/workspace-dqq3IVyd/lib/python3.9/site-packages/wagtailorderable/modeladmin/mixins.py", line 196, in reorder_view
    qs.update(**{self.sort_order_field: update_value})
UnboundLocalError: local variable 'update_value' referenced before assignment

Relevant code

if position < old_position:
if position == after_position:
position += 1
qs = qs.filter(**{'%s__lt' % self.sort_order_field: old_position,
'%s__gte' % self.sort_order_field: position})
update_value = F(self.sort_order_field) + 1
signal_kwargs.update({'from_order': position, 'to_position': old_position + 1})
elif position > old_position:
if position == before_position:
position -= 1
qs = qs.filter(**{'%s__gt' % self.sort_order_field: old_position,
'%s__lte' % self.sort_order_field: position})
update_value = F(self.sort_order_field) - 1
signal_kwargs.update({'from_order': old_position - 1, 'to_position': position})
# let's signal we will reorder some instances.
pre_reorder.send(**signal_kwargs)
# reorder all previous|next
qs.update(**{self.sort_order_field: update_value})

Debugging

Printing print(position, old_position) in the above code prints 0, 0.

Looking at my database, I see that the sort_order column for all Venue records is NULL, and this is why position and old_position and so on are defaulting to 0.

So my question is: how are we meant to initialise the database with an arbitrary sort order, so that the ordering function works?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions