diff --git a/awx/api/views.py b/awx/api/views.py index abcd06fc85..f59226196e 100644 --- a/awx/api/views.py +++ b/awx/api/views.py @@ -553,6 +553,11 @@ class OrganizationList(ListCreateAPIView): model = Organization serializer_class = OrganizationSerializer + def get_queryset(self): + qs = Organization.accessible_objects(self.request.user, {'read': True}) + qs = qs.select_related('admin_role', 'auditor_role', 'member_role') + return qs + def create(self, request, *args, **kwargs): """Create a new organzation. @@ -766,6 +771,11 @@ class TeamList(ListCreateAPIView): model = Team serializer_class = TeamSerializer + def get_queryset(self): + qs = Team.accessible_objects(self.request.user, {'read': True}) + qs = qs.select_related('admin_role', 'auditor_role', 'member_role') + return qs + class TeamDetail(RetrieveUpdateDestroyAPIView): model = Team @@ -866,6 +876,17 @@ class ProjectList(ListCreateAPIView): model = Project serializer_class = ProjectSerializer + def get_queryset(self): + projects_qs = Project.accessible_objects(self.request.user, {'read': True}) + projects_qs = projects_qs.select_related( + 'organization', + 'admin_role', + 'auditor_role', + 'member_role', + 'scm_update_role', + ) + return projects_qs + def get(self, request, *args, **kwargs): # Not optimal, but make sure the project status and last_updated fields # are up to date here... @@ -1248,6 +1269,11 @@ class InventoryList(ListCreateAPIView): model = Inventory serializer_class = InventorySerializer + def get_queryset(self): + qs = Inventory.accessible_objects(self.request.user, {'read': True}) + qs = qs.select_related('admin_role', 'auditor_role', 'updater_role', 'executor_role') + return qs + class InventoryDetail(RetrieveUpdateDestroyAPIView): model = Inventory diff --git a/awx/main/fields.py b/awx/main/fields.py index 292fd78bdb..d26e64114b 100644 --- a/awx/main/fields.py +++ b/awx/main/fields.py @@ -3,7 +3,6 @@ # Django from django.db.models.signals import ( - post_init, pre_save, post_save, post_delete, @@ -105,7 +104,6 @@ class ImplicitRoleField(models.ForeignKey): setattr(cls, '__implicit_role_fields', []) getattr(cls, '__implicit_role_fields').append(self) - post_init.connect(self._post_init, cls, True, dispatch_uid='implicit-role-post-init') pre_save.connect(self._pre_save, cls, True, dispatch_uid='implicit-role-pre-save') post_save.connect(self._post_save, cls, True, dispatch_uid='implicit-role-post-save') post_delete.connect(self._post_delete, cls, True) @@ -163,15 +161,6 @@ class ImplicitRoleField(models.ForeignKey): getattr(instance, self.name).parents.remove(getattr(obj, field_attr)) return _m2m_update - - def _post_init(self, instance, *args, **kwargs): - original_parent_roles = dict() - if instance.pk: - for implicit_role_field in getattr(instance.__class__, '__implicit_role_fields'): - original_parent_roles[implicit_role_field.name] = implicit_role_field._resolve_parent_roles(instance) - - setattr(instance, '__original_parent_roles', original_parent_roles) - def _create_role_instance_if_not_exists(self, instance): role = getattr(instance, self.name, None) if role: @@ -213,6 +202,15 @@ class ImplicitRoleField(models.ForeignKey): for implicit_role_field in getattr(instance.__class__, '__implicit_role_fields'): implicit_role_field._create_role_instance_if_not_exists(instance) + original_parent_roles = dict() + if instance.pk: + original = instance.__class__.objects.get(pk=instance.pk) + for implicit_role_field in getattr(instance.__class__, '__implicit_role_fields'): + original_parent_roles[implicit_role_field.name] = implicit_role_field._resolve_parent_roles(original) + + setattr(instance, '__original_parent_roles', original_parent_roles) + + def _post_save(self, instance, created, *args, **kwargs): if created: for implicit_role_field in getattr(instance.__class__, '__implicit_role_fields'): diff --git a/awx/main/management/commands/generate_dummy_data.py b/awx/main/management/commands/generate_dummy_data.py index e054940510..9f1b2cf83f 100644 --- a/awx/main/management/commands/generate_dummy_data.py +++ b/awx/main/management/commands/generate_dummy_data.py @@ -172,7 +172,8 @@ class Command(BaseCommand): sys.stdout.write('\r %d ' % (ids['credential'])) sys.stdout.flush() credential_id = ids['credential'] - credential = Credential.objects.create(name='%s Credential %d User %d' % (prefix, credential_id, user_idx), user=user) + credential = Credential.objects.create(name='%s Credential %d User %d' % (prefix, credential_id, user_idx)) + credential.owner_role.members.add(user) credentials.append(credential) user_idx += 1 print('') @@ -187,7 +188,8 @@ class Command(BaseCommand): sys.stdout.write('\r %d ' % (ids['credential'] - starting_credential_id)) sys.stdout.flush() credential_id = ids['credential'] - credential = Credential.objects.create(name='%s Credential %d team %d' % (prefix, credential_id, team_idx), team=team) + credential = Credential.objects.create(name='%s Credential %d team %d' % (prefix, credential_id, team_idx)) + credential.owner_role.parents.add(team.member_role) credentials.append(credential) team_idx += 1 print('')