Improve consistency of modeladmin views

pull/3060/merge
Andy Babic 2016-10-07 23:29:48 +01:00 zatwierdzone przez Matt Westcott
rodzic 78f67f8fdb
commit 9f92f894b8
3 zmienionych plików z 53 dodań i 41 usunięć

Wyświetl plik

@ -12,6 +12,7 @@ Changelog
* Fix: Use specific page model for the parent page in the explore index (Gagaro)
* Fix: Remove responsive styles in embed when there is no ratio available (Gagaro)
* Fix: Parent page link in page search modal no longer disappears on hover (Dan Braghis)
* Fix: ModelAdmin views now consistently call `get_context_data` (Andy Babic)
1.7 (20.10.2016)

Wyświetl plik

@ -27,6 +27,7 @@ Bug fixes
* Use specific page model for the parent page in the explore index (Gagaro)
* Remove responsive styles in embed when there is no ratio available (Gagaro)
* Parent page link in page search modal no longer disappears on hover (Dan Braghis)
* ModelAdmin views now consistently call ``get_context_data`` (Andy Babic)
Upgrade considerations

Wyświetl plik

@ -19,7 +19,7 @@ from django.db.models.constants import LOOKUP_SEP
from django.db.models.fields import FieldDoesNotExist
from django.db.models.fields.related import ForeignObjectRel, ManyToManyField
from django.db.models.sql.constants import QUERY_TERMS
from django.shortcuts import get_object_or_404, redirect, render
from django.shortcuts import get_object_or_404, redirect
from django.template.defaultfilters import filesizeformat
from django.utils import six
from django.utils.decorators import method_decorator
@ -100,6 +100,14 @@ class WMABaseView(TemplateView):
def get_base_queryset(self, request=None):
return self.model_admin.get_queryset(request or self.request)
def get_context_data(self, **kwargs):
context = {
'view': self,
'model_admin': self.model_admin,
}
context.update(kwargs)
return super(WMABaseView, self).get_context_data(**kwargs)
class ModelFormView(WMABaseView, FormView):
@ -133,18 +141,16 @@ class ModelFormView(WMABaseView, FormView):
)
def get_context_data(self, **kwargs):
context = super(ModelFormView, self).get_context_data(**kwargs)
instance = self.get_instance()
edit_handler_class = self.get_edit_handler_class()
form = self.get_form()
context.update({
'view': self,
'model_admin': self.model_admin,
context = {
'is_multipart': form.is_multipart(),
'edit_handler': edit_handler_class(instance=instance, form=form),
'form': form,
})
return context
}
context.update(kwargs)
return super(ModelFormView, self).get_context_data(**context)
def get_success_message(self, instance):
return _("{model_name} '{instance}' created.").format(
@ -200,10 +206,14 @@ class InstanceSpecificView(WMABaseView):
def delete_url(self):
return self.url_helper.get_action_url('delete', self.pk_quoted)
def get_context_data(self, **kwargs):
context = {'instance': self.instance}
context.update(kwargs)
return super(InstanceSpecificView, self).get_context_data(**context)
class IndexView(WMABaseView):
# IndexView settings
ORDER_VAR = 'o'
ORDER_TYPE_VAR = 'ot'
PAGE_VAR = 'p'
@ -607,7 +617,7 @@ class IndexView(WMABaseView):
return True
return False
def get_context_data(self, *args, **kwargs):
def get_context_data(self, **kwargs):
user = self.request.user
all_count = self.get_base_queryset().count()
queryset = self.get_queryset()
@ -638,7 +648,9 @@ class IndexView(WMABaseView):
'no_valid_parents': not valid_parent_count,
'required_parent_types': allowed_parent_types,
})
return context
context.update(kwargs)
return super(IndexView, self).get_context_data(**context)
def get_template_names(self):
return self.model_admin.get_index_template()
@ -701,9 +713,12 @@ class EditView(ModelFormView, InstanceSpecificView):
model_name=capfirst(self.verbose_name), instance=instance)
def get_context_data(self, **kwargs):
kwargs['user_can_delete'] = self.permission_helper.user_can_delete_obj(
self.request.user, self.instance)
return super(EditView, self).get_context_data(**kwargs)
context = {
'user_can_delete': self.permission_helper.user_can_delete_obj(
self.request.user, self.instance)
}
context.update(kwargs)
return super(EditView, self).get_context_data(**context)
def get_error_message(self):
name = self.verbose_name
@ -728,20 +743,25 @@ class ChooseParentView(WMABaseView):
def get(self, request, *args, **kwargs):
form = self.get_form(request)
context = {'view': self, 'form': form}
return render(request, self.get_template(), context)
context = self.get_context_data(form=form)
return self.render_to_response(context)
def post(self, request, *args, **kargs):
form = self.get_form(request)
if form.is_valid():
parent_pk = quote(form.cleaned_data['parent_page'].pk)
return redirect(self.url_helper.get_action_url(
'add', self.app_label, self.model_name, parent_pk))
return self.form_valid(form)
return self.form_invalid(form)
context = {'view': self, 'form': form}
return render(request, self.get_template(), context)
def form_valid(self, form):
parent_pk = quote(form.cleaned_data['parent_page'].pk)
return redirect(self.url_helper.get_action_url(
'add', self.app_label, self.model_name, parent_pk))
def get_template(self):
def form_invalid(self, form):
context = self.get_context_data(form=form)
return self.render_to_response(context)
def get_template_names(self):
return self.model_admin.get_choose_parent_template()
@ -770,10 +790,6 @@ class DeleteView(InstanceSpecificView):
"site are related to it, they may also be affected."
) % self.verbose_name
def get(self, request, *args, **kwargs):
context = {'view': self, 'instance': self.instance}
return self.render_to_response(context)
def delete_instance(self):
self.instance.delete()
@ -794,13 +810,10 @@ class DeleteView(InstanceSpecificView):
qs = getattr(self.instance, rel.get_accessor_name())
for obj in qs.all():
linked_objects.append(obj)
context = {
'view': self,
'instance': self.instance,
'protected_error': True,
'linked_objects': linked_objects,
}
context = self.get_context_data(
protected_error=True,
linked_objects=linked_objects
)
return self.render_to_response(context)
def get_template_names(self):
@ -920,16 +933,13 @@ class InspectView(InstanceSpecificView):
return fields
def get_context_data(self, **kwargs):
context = super(InspectView, self).get_context_data(**kwargs)
buttons = self.button_helper.get_buttons_for_obj(
self.instance, exclude=['inspect'])
context.update({
'view': self,
context = {
'fields': self.get_fields_dict(),
'buttons': buttons,
'instance': self.instance,
})
return context
'buttons': self.button_helper.get_buttons_for_obj(
self.instance, exclude=['inspect']),
}
context.update(kwargs)
return super(InspectView, self).get_context_data(**context)
def get_template_names(self):
return self.model_admin.get_inspect_template()