bring changeset restore object feature back to life

This commit is contained in:
Laura Klünder 2024-11-29 17:09:38 +01:00
parent e0b9ae0087
commit 3b50c6f9dd
2 changed files with 18 additions and 22 deletions

View file

@ -91,7 +91,7 @@
{% trans 'Edit' %} {% trans 'Edit' %}
</a> </a>
{% elif obj.deleted and can_edit and not obj.missing_dependencies and not obj.unique_collisions %} {% elif obj.deleted and can_edit and not obj.missing_dependencies and not obj.unique_collisions %}
<button type="submit" name="restore" value="{{ obj.pk }}" class="btn btn-warning btn-xs pull-right"> <button type="submit" name="restore" value="{{ obj.model_name }}-{{ obj.pk }}" class="btn btn-warning btn-xs pull-right">
{% trans 'Restore' %} {% trans 'Restore' %}
</button> </button>
{% endif %} {% endif %}

View file

@ -38,26 +38,21 @@ def changeset_detail(request, pk):
can_delete = changeset.can_delete(request) can_delete = changeset.can_delete(request)
if request.method == 'POST': if request.method == 'POST':
restore = request.POST.get('restore') restore_model, restore_id = (request.POST.get('restore')+'-').split('-')[:2]
if restore and restore.isdigit(): if restore_model and restore_id and restore_id.isdigit():
raise NotImplementedError # todo: restore (no pun intended) this feature if request.changeset.can_edit(request):
# if request.changeset.can_edit(request): changed_object = changeset.changes.objects.get(restore_model, {}).get(restore_id)
# try: if changed_object is None:
# changed_object = changeset.changed_objects_set.get(pk=restore) messages.error(request, _("Can't find this changed object"))
# except Exception: elif not changed_object.deleted:
# pass messages.error(request, _("Can't restore this object because it wasn't deleted"))
# else: else:
# try: changed_object.deleted = False
# changed_object.restore() messages.success(request, _('Object has been successfully restored.'))
# messages.success(request, _('Object has been successfully restored.')) else:
# except PermissionError: messages.error(request, _('You can not edit changes on this change set.'))
# messages.error(request, _('You cannot restore this object, because it depends on '
# 'a deleted object or it would violate a unique contraint.')) return redirect(reverse('editor.changesets.detail', kwargs={'pk': changeset.pk}))
#
# else:
# messages.error(request, _('You can not edit changes on this change set.'))
#
# return redirect(reverse('editor.changesets.detail', kwargs={'pk': changeset.pk}))
elif request.POST.get('activate') == '1': elif request.POST.get('activate') == '1':
with changeset.lock_to_edit(request) as changeset: with changeset.lock_to_edit(request) as changeset:
@ -72,7 +67,7 @@ def changeset_detail(request, pk):
elif request.POST.get('propose') == '1': elif request.POST.get('propose') == '1':
if not request.user.is_authenticated: if not request.user.is_authenticated:
messages.info(request, _('You need to log in to propose changes.')) messages.info(request, _('You need to log in to propose changes.'))
return redirect(reverse('editor.login')+'?r='+request.path) return redirect(reverse('editor.login') + '?r=' + request.path)
with changeset.lock_to_edit(request) as changeset: with changeset.lock_to_edit(request) as changeset:
if not changeset.title or not changeset.description: if not changeset.title or not changeset.description:
@ -242,6 +237,7 @@ def changeset_detail(request, pk):
changed_object_data = { changed_object_data = {
'model': model, 'model': model,
'model_name': model._meta.model_name,
'model_title': model._meta.verbose_name, 'model_title': model._meta.verbose_name,
'pk': changed_object.obj.id, 'pk': changed_object.obj.id,
'desc': format_lazy(_('{model} #{id}'), model=model._meta.verbose_name, id=changed_object.obj.id), 'desc': format_lazy(_('{model} #{id}'), model=model._meta.verbose_name, id=changed_object.obj.id),