From 72c63bfedce1a58c6538441373f0825c09851dea Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 25 Aug 2015 20:28:59 -0400 Subject: [PATCH] Improve form and object data passing code. --- mayan/apps/common/generics.py | 48 +++++++++++++++++++++++---- mayan/apps/common/mixins.py | 16 +-------- mayan/apps/document_comments/views.py | 5 +++ 3 files changed, 48 insertions(+), 21 deletions(-) diff --git a/mayan/apps/common/generics.py b/mayan/apps/common/generics.py index 33ac0d65cf..5564c34b52 100644 --- a/mayan/apps/common/generics.py +++ b/mayan/apps/common/generics.py @@ -249,7 +249,7 @@ class SimpleView(ViewPermissionCheckMixin, ExtraContextMixin, TemplateView): pass -class SingleObjectCreateView(InstanceExtraDataMixin, ViewPermissionCheckMixin, ExtraContextMixin, RedirectionMixin, CreateView): +class SingleObjectCreateView(ViewPermissionCheckMixin, ExtraContextMixin, RedirectionMixin, CreateView): template_name = 'appearance/generic_form.html' def form_invalid(self, form): @@ -266,7 +266,21 @@ class SingleObjectCreateView(InstanceExtraDataMixin, ViewPermissionCheckMixin, E return result def form_valid(self, form): - result = super(SingleObjectCreateView, self).form_valid(form) + # This overrides the original Django form_valid method + + self.object = form.save(commit=False) + + if hasattr(self, 'get_instance_extra_data'): + for key, value in self.get_instance_extra_data().items(): + setattr(self.object, key, value) + + if hasattr(self, 'get_save_extra_data'): + save_extra_data = self.get_save_extra_data() + else: + save_extra_data = {} + + self.object.save(**save_extra_data) + try: messages.success( self.request, @@ -279,7 +293,7 @@ class SingleObjectCreateView(InstanceExtraDataMixin, ViewPermissionCheckMixin, E self.request, _('New object created successfully.') ) - return result + return HttpResponseRedirect(self.get_success_url()) class SingleObjectDeleteView(DeleteExtraDataMixin, ViewPermissionCheckMixin, ObjectPermissionCheckMixin, ExtraContextMixin, RedirectionMixin, DeleteView): @@ -332,7 +346,7 @@ class SingleObjectDetailView(ViewPermissionCheckMixin, ObjectPermissionCheckMixi # TODO: check/test if ViewPermissionCheckMixin, ObjectPermissionCheckMixin are # in the right MRO -class SingleObjectEditView(InstanceExtraDataMixin, ViewPermissionCheckMixin, ObjectPermissionCheckMixin, ExtraContextMixin, RedirectionMixin, UpdateView): +class SingleObjectEditView(ViewPermissionCheckMixin, ObjectPermissionCheckMixin, ExtraContextMixin, RedirectionMixin, UpdateView): template_name = 'appearance/generic_form.html' def form_invalid(self, form): @@ -353,7 +367,20 @@ class SingleObjectEditView(InstanceExtraDataMixin, ViewPermissionCheckMixin, Obj return result def form_valid(self, form): - result = super(SingleObjectEditView, self).form_valid(form) + # This overrides the original Django form_valid method + + self.object = form.save(commit=False) + + if hasattr(self, 'get_instance_extra_data'): + for key, value in self.get_instance_extra_data().items(): + setattr(self.object, key, value) + + if hasattr(self, 'get_save_extra_data'): + save_extra_data = self.get_save_extra_data() + else: + save_extra_data = {} + + self.object.save(**save_extra_data) try: messages.success( @@ -367,7 +394,16 @@ class SingleObjectEditView(InstanceExtraDataMixin, ViewPermissionCheckMixin, Obj self.request, _('Details saved successfully.') ) - return result + return HttpResponseRedirect(self.get_success_url()) + + def get_object(self, queryset=None): + obj = super(SingleObjectEditView, self).get_object(queryset=queryset) + + if hasattr(self, 'get_instance_extra_data'): + for key, value in self.get_instance_extra_data().items(): + setattr(obj, key, value) + + return obj class SingleObjectListView(PaginationMixin, ViewPermissionCheckMixin, ObjectListPermissionFilterMixin, ExtraContextMixin, RedirectionMixin, ListView): diff --git a/mayan/apps/common/mixins.py b/mayan/apps/common/mixins.py index 4f9abfa420..cb02ade704 100644 --- a/mayan/apps/common/mixins.py +++ b/mayan/apps/common/mixins.py @@ -10,7 +10,7 @@ from acls.models import AccessControlList from permissions import Permission __all__ = ( - 'DeleteExtraDataMixin', 'ExtraContextMixin', 'InstanceExtraDataMixin', + 'DeleteExtraDataMixin', 'ExtraContextMixin', 'ObjectListPermissionFilterMixin', 'ObjectPermissionCheckMixin', 'RedirectionMixin', 'ViewPermissionCheckMixin' ) @@ -40,20 +40,6 @@ class ExtraContextMixin(object): return context -class InstanceExtraDataMixin(object): - def form_valid(self, form): - if hasattr(self, 'get_instance_extra_data'): - self.object = form.save(commit=False) - for key, value in self.get_instance_extra_data().items(): - setattr(self.object, key, value) - - self.object.save() - else: - self.object = form.save() - - return super(InstanceExtraDataMixin, self).form_valid(form) - - class MultipleInstanceActionMixin(object): model = None diff --git a/mayan/apps/document_comments/views.py b/mayan/apps/document_comments/views.py index c98fc99705..943475d886 100644 --- a/mayan/apps/document_comments/views.py +++ b/mayan/apps/document_comments/views.py @@ -52,6 +52,11 @@ class DocumentCommentCreateView(SingleObjectCreateView): 'document': self.get_document(), 'user': self.request.user, } + def get_save_extra_data(self): + return { + '_user': self.request.user, + } + def get_post_action_redirect(self): return reverse( 'comments:comments_for_document', args=(self.kwargs['pk'],)