From da16c3759b3fa8c357778510776fb32800ebc394 Mon Sep 17 00:00:00 2001 From: Milo Mirate <992859+mmirate@users.noreply.github.com> Date: Thu, 9 Jan 2025 22:15:50 -0500 Subject: [PATCH 1/2] Avoid fetching table data in duplicate from ListView mixin Fixes #914. --- django_tables2/views.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/django_tables2/views.py b/django_tables2/views.py index b972c0a0..680224ba 100644 --- a/django_tables2/views.py +++ b/django_tables2/views.py @@ -2,7 +2,7 @@ from typing import Any, Optional from django.core.exceptions import ImproperlyConfigured -from django.views.generic.list import ListView +from django.views.generic.list import ListView, MultipleObjectMixin as ConfoundingMultipleObjectMixin from . import tables from .config import RequestConfig @@ -156,8 +156,17 @@ def get_context_data(self, **kwargs: Any) -> dict[str, Any]: """ Overridden version of `.TemplateResponseMixin` to inject the table into the template's context. + + Will avoid calling ``django.views.generic.list.ListView.get_context_data`` + if this mixin is combined with ``django.views.generic.list.ListView`` or + similar, as presumably ListView.get_context_data is meant to fetch the + same data as this function will fetch directly. """ - context = super().get_context_data(**kwargs) + context = ( + super(ConfoundingMultipleObjectMixin, self).get_context_data(**kwargs) + if isinstance(self, ConfoundingMultipleObjectMixin) else + super().get_context_data(**kwargs) + ) table = self.get_table(**self.get_table_kwargs()) context[self.get_context_table_name(table)] = table return context From a8054bd70b9c111c79144f2693548c69ad2a087f Mon Sep 17 00:00:00 2001 From: Milo Mirate <992859+mmirate@users.noreply.github.com> Date: Thu, 9 Jan 2025 22:19:27 -0500 Subject: [PATCH 2/2] Appease the format checker --- django_tables2/views.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/django_tables2/views.py b/django_tables2/views.py index 680224ba..ce65b61e 100644 --- a/django_tables2/views.py +++ b/django_tables2/views.py @@ -2,7 +2,10 @@ from typing import Any, Optional from django.core.exceptions import ImproperlyConfigured -from django.views.generic.list import ListView, MultipleObjectMixin as ConfoundingMultipleObjectMixin +from django.views.generic.list import ( + ListView, + MultipleObjectMixin as ConfoundingMultipleObjectMixin, +) from . import tables from .config import RequestConfig @@ -164,8 +167,8 @@ def get_context_data(self, **kwargs: Any) -> dict[str, Any]: """ context = ( super(ConfoundingMultipleObjectMixin, self).get_context_data(**kwargs) - if isinstance(self, ConfoundingMultipleObjectMixin) else - super().get_context_data(**kwargs) + if isinstance(self, ConfoundingMultipleObjectMixin) + else super().get_context_data(**kwargs) ) table = self.get_table(**self.get_table_kwargs()) context[self.get_context_table_name(table)] = table