Add view mixin to make sure a subclass can't override its
parent's get_queryset method. Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
@@ -25,7 +25,7 @@ from .mixins import (
|
||||
DeleteExtraDataMixin, DynamicFormViewMixin, ExtraContextMixin,
|
||||
FormExtraKwargsMixin, MultipleObjectMixin, ObjectActionMixin,
|
||||
ObjectListPermissionFilterMixin, ObjectNameMixin,
|
||||
ObjectPermissionCheckMixin, RedirectionMixin,
|
||||
ObjectPermissionCheckMixin, PreserveGetQuerysetMixin, RedirectionMixin,
|
||||
ViewPermissionCheckMixin
|
||||
)
|
||||
|
||||
@@ -282,12 +282,11 @@ class MultiFormView(DjangoFormView):
|
||||
return self.forms_invalid(forms)
|
||||
|
||||
|
||||
class MultipleObjectFormActionView(ObjectActionMixin, MultipleObjectMixin, FormExtraKwargsMixin, ViewPermissionCheckMixin, ExtraContextMixin, RedirectionMixin, DjangoFormView):
|
||||
class MultipleObjectFormActionView(PreserveGetQuerysetMixin, 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 form_valid(self, form):
|
||||
@@ -295,7 +294,7 @@ class MultipleObjectFormActionView(ObjectActionMixin, MultipleObjectMixin, FormE
|
||||
return super(MultipleObjectFormActionView, self).form_valid(form=form)
|
||||
|
||||
|
||||
class MultipleObjectConfirmActionView(ObjectActionMixin, MultipleObjectMixin, ViewPermissionCheckMixin, ExtraContextMixin, RedirectionMixin, TemplateView):
|
||||
class MultipleObjectConfirmActionView(ObjectActionMixin, MultipleObjectMixin, ObjectListPermissionFilterMixin, ViewPermissionCheckMixin, ExtraContextMixin, RedirectionMixin, TemplateView):
|
||||
template_name = 'appearance/generic_confirm.html'
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
@@ -459,7 +458,7 @@ class SingleObjectDynamicFormEditView(DynamicFormViewMixin, SingleObjectEditView
|
||||
pass
|
||||
|
||||
|
||||
class SingleObjectListView(PaginationMixin, ViewPermissionCheckMixin, ObjectListPermissionFilterMixin, ExtraContextMixin, RedirectionMixin, ListView):
|
||||
class SingleObjectListView(PreserveGetQuerysetMixin, PaginationMixin, ViewPermissionCheckMixin, ObjectListPermissionFilterMixin, ExtraContextMixin, RedirectionMixin, ListView):
|
||||
template_name = 'appearance/generic_list.html'
|
||||
|
||||
def get_paginate_by(self, queryset):
|
||||
|
||||
@@ -18,8 +18,8 @@ __all__ = (
|
||||
'DeleteExtraDataMixin', 'DynamicFormViewMixin', 'ExtraContextMixin',
|
||||
'FormExtraKwargsMixin', 'MultipleObjectMixin', 'ObjectActionMixin',
|
||||
'ObjectListPermissionFilterMixin', 'ObjectNameMixin',
|
||||
'ObjectPermissionCheckMixin', 'RedirectionMixin',
|
||||
'ViewPermissionCheckMixin'
|
||||
'ObjectPermissionCheckMixin', 'PreserveGetQuerysetMixin',
|
||||
'RedirectionMixin', 'ViewPermissionCheckMixin'
|
||||
)
|
||||
|
||||
|
||||
@@ -266,6 +266,26 @@ 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
|
||||
|
||||
@@ -63,8 +63,7 @@ class DocumentListView(SingleObjectListView):
|
||||
}
|
||||
|
||||
def get_queryset(self):
|
||||
self.queryset = self.get_document_queryset().filter(is_stub=False)
|
||||
return super(DocumentListView, self).get_queryset()
|
||||
return self.get_document_queryset().filter(is_stub=False)
|
||||
|
||||
|
||||
class DeletedDocumentListView(DocumentListView):
|
||||
|
||||
@@ -133,8 +133,7 @@ class SmartLinkListView(SingleObjectListView):
|
||||
}
|
||||
|
||||
def get_queryset(self):
|
||||
self.queryset = self.get_smart_link_queryset()
|
||||
return super(SmartLinkListView, self).get_queryset()
|
||||
return self.get_smart_link_queryset()
|
||||
|
||||
def get_smart_link_queryset(self):
|
||||
return SmartLink.objects.all()
|
||||
|
||||
@@ -182,8 +182,7 @@ class TagListView(SingleObjectListView):
|
||||
}
|
||||
|
||||
def get_queryset(self):
|
||||
self.queryset = self.get_tag_queryset()
|
||||
return super(TagListView, self).get_queryset()
|
||||
return self.get_tag_queryset()
|
||||
|
||||
def get_tag_queryset(self):
|
||||
return Tag.objects.all()
|
||||
|
||||
Reference in New Issue
Block a user