diff --git a/mayan/apps/common/generics.py b/mayan/apps/common/generics.py index cf693bcfca..eba64a7072 100644 --- a/mayan/apps/common/generics.py +++ b/mayan/apps/common/generics.py @@ -13,10 +13,7 @@ from django.views.generic.list import ListView from pure_pagination.mixins import PaginationMixin from .forms import ChoiceForm -from .mixins import ( - ExtraContextMixin, ObjectListPermissionFilterMixin, - ObjectPermissionCheckMixin, RedirectionMixin, ViewPermissionCheckMixin -) +from .mixins import * # NOQA from .settings import setting_paginate_by __all__ = ( @@ -251,7 +248,7 @@ class SimpleView(ViewPermissionCheckMixin, ExtraContextMixin, TemplateView): pass -class SingleObjectCreateView(ViewPermissionCheckMixin, ExtraContextMixin, RedirectionMixin, CreateView): +class SingleObjectCreateView(InstanceExtraDataMixin, ViewPermissionCheckMixin, ExtraContextMixin, RedirectionMixin, CreateView): template_name = 'appearance/generic_form.html' def form_invalid(self, form): @@ -325,7 +322,7 @@ class SingleObjectDeleteView(ViewPermissionCheckMixin, ObjectPermissionCheckMixi # TODO: check/test if ViewPermissionCheckMixin, ObjectPermissionCheckMixin are # in the right MRO -class SingleObjectEditView(ViewPermissionCheckMixin, ObjectPermissionCheckMixin, ExtraContextMixin, RedirectionMixin, UpdateView): +class SingleObjectEditView(InstanceExtraDataMixin, ViewPermissionCheckMixin, ObjectPermissionCheckMixin, ExtraContextMixin, RedirectionMixin, UpdateView): template_name = 'appearance/generic_form.html' def form_invalid(self, form): diff --git a/mayan/apps/common/mixins.py b/mayan/apps/common/mixins.py index efdc59cb4f..25729085c6 100644 --- a/mayan/apps/common/mixins.py +++ b/mayan/apps/common/mixins.py @@ -9,6 +9,12 @@ from django.shortcuts import get_object_or_404 from acls.models import AccessControlList from permissions import Permission +__all__ = ( + 'ExtraContextMixin', 'InstanceExtraDataMixin', + 'ObjectListPermissionFilterMixin', 'ObjectPermissionCheckMixin', + 'RedirectionMixin', 'ViewPermissionCheckMixin' +) + class ExtraContextMixin(object): extra_context = {} @@ -22,6 +28,20 @@ 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