from core.models import * def handle(user): deployments = Deployment.objects.all() site_deployments = SiteDeployments.objects.all() site_deploy_lookup = defaultdict(list) for site_deployment in site_deployments: site_deploy_lookup[site_deployment.site].append(site_deployment.deployment) user_deploy_lookup = defaultdict(list) for user_deployment in UserDeployments.objects.all(): user_deploy_lookup[user_deployment.user].append(user_deployment.deployment) all_deployments = Deployment.objects.filter() if user.is_admin: # admins should have an account at all deployments expected_deployments = deployments else: # normal users should have an account at their site's deployments #expected_deployments = site_deploy_lookup[user.site] # users are added to all deployments for now expected_deployments = deployments for expected_deployment in expected_deployments: if not user in user_deploy_lookup or \ expected_deployment not in user_deploy_lookup[user]: # add new record ud = UserDeployments(user=user, deployment=expected_deployment) ud.save()