def handle(controller): from core.models import Controller, Site, ControllerSite, Slice, ControllerSlice, User, ControllerUser from collections import defaultdict # relations for all sites ctrls_by_site = defaultdict(list) ctrl_sites = ControllerSite.objects.all() for ctrl_site in ctrl_sites: ctrls_by_site[ctrl_site.site].append(ctrl_site.controller) sites = Site.objects.all() for site in sites: if site not in ctrls_by_site or \ controller not in ctrls_by_site[site]: controller_site = ControllerSite(controller=controller, site=site) controller_site.save() # relations for all slices ctrls_by_slice = defaultdict(list) ctrl_slices = ControllerSlice.objects.all() for ctrl_slice in ctrl_slices: ctrls_by_slice[ctrl_slice.slice].append(ctrl_slice.controller) slices = Slice.objects.all() for slice in slices: if slice not in ctrls_by_slice or \ controller not in ctrls_by_slice: controller_slice = ControllerSlice(controller=controller, slice=slice) controller_slice.save() # relations for all users ctrls_by_user = defaultdict(list) ctrl_users = ControllerUser.objects.all() for ctrl_user in ctrl_users: ctrls_by_user[ctrl_user.user].append(ctrl_user.controller) users = User.objects.all() for user in users: if user not in ctrls_by_user or \ controller not in ctrls_by_user[user]: controller_user = ControllerUser(controller=controller, user=user) controller_user.save()