Remove PreserveGetQuerySet mixin. Update SingleObjectList and

MultipleObjectFormActionView views to use a new get_object_list method.

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2017-08-16 22:11:22 -04:00
parent c43f5eb66e
commit 2052caada4
39 changed files with 540 additions and 508 deletions

View File

@@ -3,6 +3,7 @@ from __future__ import absolute_import, unicode_literals
from django.conf import settings
from django.contrib import messages
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ImproperlyConfigured
from django.http import HttpResponseRedirect
from django.utils.encoding import force_text
from django.utils.translation import ugettext_lazy as _
@@ -25,8 +26,7 @@ from .mixins import (
DeleteExtraDataMixin, DynamicFormViewMixin, ExtraContextMixin,
FormExtraKwargsMixin, MultipleObjectMixin, ObjectActionMixin,
ObjectListPermissionFilterMixin, ObjectNameMixin,
ObjectPermissionCheckMixin, PreserveGetQuerysetMixin, RedirectionMixin,
ViewPermissionCheckMixin
ObjectPermissionCheckMixin, RedirectionMixin, ViewPermissionCheckMixin
)
from .settings import setting_paginate_by
@@ -282,17 +282,37 @@ class MultiFormView(DjangoFormView):
return self.forms_invalid(forms)
class MultipleObjectFormActionView(PreserveGetQuerysetMixin, ObjectActionMixin, MultipleObjectMixin, FormExtraKwargsMixin, ViewPermissionCheckMixin, ExtraContextMixin, RedirectionMixin, DjangoFormView):
class MultipleObjectFormActionView(ObjectActionMixin, MultipleObjectMixin, FormExtraKwargsMixin, ViewPermissionCheckMixin, ExtraContextMixin, RedirectionMixin, DjangoFormView):
"""
This view will present a form and upon receiving a POST request will
perform an action on an object or queryset
"""
template_name = 'appearance/generic_form.html'
def __init__(self, *args, **kwargs):
result = super(MultipleObjectFormActionView, self).__init__(*args, **kwargs)
if self.__class__.mro()[0].get_queryset != MultipleObjectFormActionView.get_queryset:
raise ImproperlyConfigured(
'%(cls)s is overloading the get_queryset method. Subclasses '
'should implement the get_object_list method instead. ' % {
'cls': self.__class__.__name__
}
)
return result
def form_valid(self, form):
self.view_action(form=form)
return super(MultipleObjectFormActionView, self).form_valid(form=form)
def get_queryset(self):
try:
return super(MultipleObjectFormActionView, self).get_queryset()
except ImproperlyConfigured:
self.queryset = self.get_object_list()
return super(MultipleObjectFormActionView, self).get_queryset()
class MultipleObjectConfirmActionView(ObjectActionMixin, MultipleObjectMixin, ObjectListPermissionFilterMixin, ViewPermissionCheckMixin, ExtraContextMixin, RedirectionMixin, TemplateView):
template_name = 'appearance/generic_confirm.html'
@@ -458,8 +478,28 @@ class SingleObjectDynamicFormEditView(DynamicFormViewMixin, SingleObjectEditView
pass
class SingleObjectListView(PreserveGetQuerysetMixin, PaginationMixin, ViewPermissionCheckMixin, ObjectListPermissionFilterMixin, ExtraContextMixin, RedirectionMixin, ListView):
class SingleObjectListView(PaginationMixin, ViewPermissionCheckMixin, ObjectListPermissionFilterMixin, ExtraContextMixin, RedirectionMixin, ListView):
template_name = 'appearance/generic_list.html'
def __init__(self, *args, **kwargs):
result = super(SingleObjectListView, self).__init__(*args, **kwargs)
if self.__class__.mro()[0].get_queryset != SingleObjectListView.get_queryset:
raise ImproperlyConfigured(
'%(cls)s is overloading the get_queryset method. Subclasses '
'should implement the get_object_list method instead. ' % {
'cls': self.__class__.__name__
}
)
return result
def get_paginate_by(self, queryset):
return setting_paginate_by.value
def get_queryset(self):
try:
return super(SingleObjectListView, self).get_queryset()
except ImproperlyConfigured:
self.queryset = self.get_object_list()
return super(SingleObjectListView, self).get_queryset()

View File

@@ -18,8 +18,8 @@ __all__ = (
'DeleteExtraDataMixin', 'DynamicFormViewMixin', 'ExtraContextMixin',
'FormExtraKwargsMixin', 'MultipleObjectMixin', 'ObjectActionMixin',
'ObjectListPermissionFilterMixin', 'ObjectNameMixin',
'ObjectPermissionCheckMixin', 'PreserveGetQuerysetMixin',
'RedirectionMixin', 'ViewPermissionCheckMixin'
'ObjectPermissionCheckMixin', 'RedirectionMixin',
'ViewPermissionCheckMixin'
)
@@ -266,26 +266,6 @@ class ObjectPermissionCheckMixin(object):
).dispatch(request, *args, **kwargs)
class PreserveGetQuerysetMixin(object):
"""
Allows class based views to define a get_queryset method that doesn't
overrided the parent classe's get_queryset method
"""
def __init__(self, *args, **kwargs):
result = super(PreserveGetQuerysetMixin, self).__init__(*args, **kwargs)
if not hasattr(self.__class__, 'original_get_queryset'):
if not self.__class__.mro()[0].get_queryset == PreserveGetQuerysetMixin.get_queryset:
setattr(self.__class__, 'original_get_queryset', self.__class__.mro()[0].get_queryset)
self.__class__.mro()[0].get_queryset = PreserveGetQuerysetMixin.get_queryset
return result
def get_queryset(self, *args, **kwargs):
if hasattr(self.__class__, 'original_get_queryset'):
self.queryset = self.__class__.original_get_queryset(self, *args, **kwargs)
return super(PreserveGetQuerysetMixin, self).get_queryset(*args, **kwargs)
class RedirectionMixin(object):
post_action_redirect = None
action_cancel_redirect = None

View File

@@ -177,7 +177,7 @@ class FilterResultListView(SingleObjectListView):
except KeyError:
raise Http404(ugettext('Filter not found'))
def get_queryset(self):
def get_object_list(self):
return self.get_filter().get_queryset(user=self.request.user)