Sped up the create_permissions signal handler (and thus the test suite) by restructuring its queries.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@14446 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Alex Gaynor 2010-11-04 00:01:54 +00:00
parent d8e311c8d1
commit 877033b479
1 changed files with 3 additions and 7 deletions

View File

@ -26,21 +26,17 @@ def create_permissions(app, created_models, verbosity, **kwargs):
searched_perms = set() searched_perms = set()
# The codenames and ctypes that should exist. # The codenames and ctypes that should exist.
ctypes = set() ctypes = set()
codenames = set()
for klass in app_models: for klass in app_models:
ctype = ContentType.objects.get_for_model(klass) ctype = ContentType.objects.get_for_model(klass)
ctypes.add(ctype) ctypes.add(ctype)
for perm in _get_all_permissions(klass._meta): for perm in _get_all_permissions(klass._meta):
codenames.add(perm[0])
searched_perms.add((ctype, perm)) searched_perms.add((ctype, perm))
# Find all the Permissions that a) have a content_type for a model we're # Find all the Permissions that have a context_type for a model we're
# looking for, and b) have a codename we're looking for. It doesn't need to # looking for. We don't need to check for codenames since we already have
# have both, we have a list of exactly what we want, and it's faster to # a list of the ones we're going to create.
# write the query with fewer conditions.
all_perms = set(auth_app.Permission.objects.filter( all_perms = set(auth_app.Permission.objects.filter(
content_type__in=ctypes, content_type__in=ctypes,
codename__in=codenames
).values_list( ).values_list(
"content_type", "codename" "content_type", "codename"
)) ))