Object action mixin

Add post_object_action_url property to redirect the view after
all items in the queryset have been processed.

Add the exception instance in the error message context.

Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
This commit is contained in:
Roberto Rosario
2019-01-31 05:57:44 -04:00
parent 3c2d2d1087
commit 495ac8d196

View File

@@ -304,9 +304,13 @@ class ObjectActionMixin(object):
Mixin that performs an user action to a queryset
"""
error_message = 'Unable to perform operation on object %(instance)s.'
post_object_action_url = None
success_message = 'Operation performed on %(count)d object.'
success_message_plural = 'Operation performed on %(count)d objects.'
def get_post_object_action_url(self):
return self.post_object_action_url
def get_success_message(self, count):
return ungettext(
singular=self.success_message,
@@ -322,25 +326,28 @@ class ObjectActionMixin(object):
def view_action(self, form=None):
self.action_count = 0
self.action_id_list = []
for instance in self.get_object_list():
try:
self.object_action(form=form, instance=instance)
except PermissionDenied:
pass
except ActionError:
except Exception as exception:
messages.error(
request=self.request,
message=self.error_message % {'instance': instance}
message=self.error_message % {
'exception': exception, 'instance': instance
}, request=self.request
)
else:
self.action_count += 1
self.action_id_list.append(instance.pk)
messages.success(
request=self.request,
message=self.get_success_message(count=self.action_count)
message=self.get_success_message(count=self.action_count),
request=self.request
)
self.success_url = self.get_post_object_action_url()
class ObjectNameMixin(object):
def get_object_name(self, context=None):