Improve form and object data passing code.
This commit is contained in:
@@ -249,7 +249,7 @@ class SimpleView(ViewPermissionCheckMixin, ExtraContextMixin, TemplateView):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class SingleObjectCreateView(InstanceExtraDataMixin, ViewPermissionCheckMixin, ExtraContextMixin, RedirectionMixin, CreateView):
|
class SingleObjectCreateView(ViewPermissionCheckMixin, ExtraContextMixin, RedirectionMixin, CreateView):
|
||||||
template_name = 'appearance/generic_form.html'
|
template_name = 'appearance/generic_form.html'
|
||||||
|
|
||||||
def form_invalid(self, form):
|
def form_invalid(self, form):
|
||||||
@@ -266,7 +266,21 @@ class SingleObjectCreateView(InstanceExtraDataMixin, ViewPermissionCheckMixin, E
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
def form_valid(self, form):
|
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:
|
try:
|
||||||
messages.success(
|
messages.success(
|
||||||
self.request,
|
self.request,
|
||||||
@@ -279,7 +293,7 @@ class SingleObjectCreateView(InstanceExtraDataMixin, ViewPermissionCheckMixin, E
|
|||||||
self.request, _('New object created successfully.')
|
self.request, _('New object created successfully.')
|
||||||
)
|
)
|
||||||
|
|
||||||
return result
|
return HttpResponseRedirect(self.get_success_url())
|
||||||
|
|
||||||
|
|
||||||
class SingleObjectDeleteView(DeleteExtraDataMixin, ViewPermissionCheckMixin, ObjectPermissionCheckMixin, ExtraContextMixin, RedirectionMixin, DeleteView):
|
class SingleObjectDeleteView(DeleteExtraDataMixin, ViewPermissionCheckMixin, ObjectPermissionCheckMixin, ExtraContextMixin, RedirectionMixin, DeleteView):
|
||||||
@@ -332,7 +346,7 @@ class SingleObjectDetailView(ViewPermissionCheckMixin, ObjectPermissionCheckMixi
|
|||||||
|
|
||||||
# TODO: check/test if ViewPermissionCheckMixin, ObjectPermissionCheckMixin are
|
# TODO: check/test if ViewPermissionCheckMixin, ObjectPermissionCheckMixin are
|
||||||
# in the right MRO
|
# 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'
|
template_name = 'appearance/generic_form.html'
|
||||||
|
|
||||||
def form_invalid(self, form):
|
def form_invalid(self, form):
|
||||||
@@ -353,7 +367,20 @@ class SingleObjectEditView(InstanceExtraDataMixin, ViewPermissionCheckMixin, Obj
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
def form_valid(self, form):
|
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:
|
try:
|
||||||
messages.success(
|
messages.success(
|
||||||
@@ -367,7 +394,16 @@ class SingleObjectEditView(InstanceExtraDataMixin, ViewPermissionCheckMixin, Obj
|
|||||||
self.request, _('Details saved successfully.')
|
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):
|
class SingleObjectListView(PaginationMixin, ViewPermissionCheckMixin, ObjectListPermissionFilterMixin, ExtraContextMixin, RedirectionMixin, ListView):
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ from acls.models import AccessControlList
|
|||||||
from permissions import Permission
|
from permissions import Permission
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
'DeleteExtraDataMixin', 'ExtraContextMixin', 'InstanceExtraDataMixin',
|
'DeleteExtraDataMixin', 'ExtraContextMixin',
|
||||||
'ObjectListPermissionFilterMixin', 'ObjectPermissionCheckMixin',
|
'ObjectListPermissionFilterMixin', 'ObjectPermissionCheckMixin',
|
||||||
'RedirectionMixin', 'ViewPermissionCheckMixin'
|
'RedirectionMixin', 'ViewPermissionCheckMixin'
|
||||||
)
|
)
|
||||||
@@ -40,20 +40,6 @@ class ExtraContextMixin(object):
|
|||||||
return context
|
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):
|
class MultipleInstanceActionMixin(object):
|
||||||
model = None
|
model = None
|
||||||
|
|
||||||
|
|||||||
@@ -52,6 +52,11 @@ class DocumentCommentCreateView(SingleObjectCreateView):
|
|||||||
'document': self.get_document(), 'user': self.request.user,
|
'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):
|
def get_post_action_redirect(self):
|
||||||
return reverse(
|
return reverse(
|
||||||
'comments:comments_for_document', args=(self.kwargs['pk'],)
|
'comments:comments_for_document', args=(self.kwargs['pk'],)
|
||||||
|
|||||||
Reference in New Issue
Block a user