Optimize the db query on group edit page.

A couple of related selects and prefetches on the content types
and permissions will cut down the query count slightly.
pull/3376/head
Ashia 2016-10-10 18:58:05 -06:00 zatwierdzone przez Matt Westcott
rodzic b0d8b4c577
commit fd5a7ee171
2 zmienionych plików z 6 dodań i 6 usunięć

Wyświetl plik

@ -404,8 +404,8 @@ class BaseGroupCollectionMemberPermissionFormSet(forms.BaseFormSet):
for collection, collection_permissions in groupby(
instance.collection_permissions.filter(
permission__in=self.permission_queryset,
).order_by('collection'),
permission__in=self.permission_queryset
).select_related('permission__content_type', 'collection').order_by('collection'),
lambda cp: cp.collection
):
initial_data.append({
@ -500,7 +500,7 @@ def collection_member_permission_formset_factory(
permission_queryset = Permission.objects.filter(
content_type__app_label=model._meta.app_label,
codename__in=[codename for codename, short_label, long_label in permission_types]
)
).select_related('content_type')
if default_prefix is None:
default_prefix = '%s_permissions' % model._meta.model_name
@ -512,7 +512,7 @@ def collection_member_permission_formset_factory(
(i.e. group or user) for a specific collection
"""
collection = forms.ModelChoiceField(
queryset=Collection.objects.all()
queryset=Collection.objects.all().prefetch_related('group_permissions')
)
permissions = forms.ModelMultipleChoiceField(
queryset=permission_queryset,

Wyświetl plik

@ -201,7 +201,7 @@ class GroupForm(forms.ModelForm):
self.registered_permissions = Permission.objects.none()
for fn in hooks.get_hooks('register_permissions'):
self.registered_permissions = self.registered_permissions | fn()
self.fields['permissions'].queryset = self.registered_permissions
self.fields['permissions'].queryset = self.registered_permissions.select_related('content_type')
required_css_class = "required"
@ -276,7 +276,7 @@ class BaseGroupPagePermissionFormSet(forms.BaseFormSet):
initial_data = []
for page, page_permissions in groupby(
instance.page_permissions.order_by('page'), lambda pp: pp.page
instance.page_permissions.select_related('page').order_by('page'), lambda pp: pp.page
):
initial_data.append({
'page': page,