Skip to content

Commit

Permalink
Lower the number of queries on GroupAdmin page.
Browse files Browse the repository at this point in the history
Because default GroupAdmin has modified formfield_for_manytomany
  • Loading branch information
wwarne authored and manelclos committed Mar 22, 2021
1 parent 4239f8d commit 06dd4e4
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
3 changes: 2 additions & 1 deletion groupadmin_users/admin.py
@@ -1,5 +1,6 @@
from django.contrib import admin
from django.contrib.auth.models import Group
from django.contrib.auth.admin import GroupAdmin as GroupAdminDefault

from groupadmin_users.forms import GroupAdminForm

Expand All @@ -9,7 +10,7 @@


# Create a new Group admin.
class GroupAdmin(admin.ModelAdmin):
class GroupAdmin(GroupAdminDefault):
# Use our custom form.
form = GroupAdminForm
# Filter permissions horizontal as well.
Expand Down
22 changes: 22 additions & 0 deletions tests/tests.py
@@ -1,7 +1,11 @@
from contextlib import contextmanager

from django import VERSION
from django.contrib.admin.sites import AdminSite
from django.contrib.auth.models import User, Group
from django.db import DEFAULT_DB_ALIAS, connections
from django.test import TestCase
from django.test.utils import CaptureQueriesContext

from groupadmin_users.admin import GroupAdmin

Expand Down Expand Up @@ -31,6 +35,19 @@ def setUp(self):

self.client.login(username='admin', password='password')

@contextmanager
def withAssertNumQueriesLessThan(self, value, using=DEFAULT_DB_ALIAS):
with CaptureQueriesContext(connections[using]) as context:
yield # your test will be run here
executed = len(context.captured_queries)
msg = "%d queries executed, %d expected\nCaptured queries were:\n%s" % (
executed, value,
'\n'.join(
'%d. %s' % (i, query['sql']) for i, query in enumerate(context.captured_queries, start=1)
)
)
self.assertLess(len(context.captured_queries), value, msg=msg)

def test_default_fields(self):
ga = GroupAdmin(Group, self.site)

Expand Down Expand Up @@ -83,3 +100,8 @@ def test_form_edit(self):
self.assertTrue(group.name == 'admins')
self.assertTrue(group.permissions.all().count() == 2)
self.assertTrue(group.user_set.first() == self.admin)

def test_group_permission_performance(self):
with self.withAssertNumQueriesLessThan(12): # instead of 259!
response = self.client.get('/admin/auth/group/%s/' % self.group.pk, follow=True)
self.assertEqual(response.status_code, 200)

0 comments on commit 06dd4e4

Please sign in to comment.