Add mixin to add extra instance data to the CBV create and edit views.

This commit is contained in:
Roberto Rosario
2015-08-23 21:36:33 -04:00
parent 23f479c481
commit 8cd14a2ae1
2 changed files with 23 additions and 6 deletions

View File

@@ -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):

View File

@@ -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