ctype = ContentType.objects.get_for_model(DockitPermission) # The codenames and ctypes that should exist. for klass in documents: for perm in _get_all_permissions(klass._meta): searched_perms.append(perm) # Find all the Permissions that have a context_type for a model we're # looking for. We don't need to check for codenames since we already have # a list of the ones we're going to create. all_perms = set(auth_app.Permission.objects.filter(content_type=ctype).values_list("codename", flat=True)) for codename, name in searched_perms: # If the permissions exists, move on. if codename in all_perms: continue p = auth_app.Permission.objects.create(codename=codename, name=name, content_type=ctype) if verbosity >= 2: print "Adding permission '%s'" % p def on_document_registered(document, **kwargs): create_permissions([document], 1) document_registered.connect(on_document_registered) try: create_permissions(COLLECTIONS.values(), 1) except DatabaseError: pass