From 4bb9bd5a2b346084cf3dfbf2b20c1c4f3ac49bb1 Mon Sep 17 00:00:00 2001 From: AlanCoding Date: Wed, 19 Jul 2017 14:07:11 -0400 Subject: [PATCH] correct search terms for reverse FK fields --- awx/api/generics.py | 8 ++++++-- awx/main/tests/unit/api/test_generics.py | 11 +++++++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/awx/api/generics.py b/awx/api/generics.py index 8cb03d634c..654457ef45 100644 --- a/awx/api/generics.py +++ b/awx/api/generics.py @@ -10,6 +10,7 @@ import time from django.conf import settings from django.db import connection from django.db.models.fields import FieldDoesNotExist +from django.db.models.fields.related import OneToOneRel from django.http import QueryDict from django.shortcuts import get_object_or_404 from django.template.loader import render_to_string @@ -350,8 +351,11 @@ class ListAPIView(generics.ListAPIView, GenericAPIView): if getattr(field, 'related_model', None): fields.add('{}__search'.format(field.name)) for rel in self.model._meta.related_objects: - name = rel.related_model._meta.verbose_name.replace(" ", "_") - if skip_related_name(name): + name = rel.related_name + if isinstance(rel, OneToOneRel) and self.model._meta.verbose_name.startswith('unified'): + # Add underscores for polymorphic subclasses for user utility + name = rel.related_model._meta.verbose_name.replace(" ", "_") + if skip_related_name(name) or name.endswith('+'): continue fields.add('{}__search'.format(name)) m2m_rel = [] diff --git a/awx/main/tests/unit/api/test_generics.py b/awx/main/tests/unit/api/test_generics.py index 82647460e0..10baf7eab1 100644 --- a/awx/main/tests/unit/api/test_generics.py +++ b/awx/main/tests/unit/api/test_generics.py @@ -13,9 +13,10 @@ from awx.api.generics import ( ParentMixin, SubListCreateAttachDetachAPIView, SubListAttachDetachAPIView, DeleteLastUnattachLabelMixin, - ResourceAccessList + ResourceAccessList, + ListAPIView ) -from awx.main.models import Organization +from awx.main.models import Organization, Credential @pytest.fixture @@ -263,3 +264,9 @@ class TestResourceAccessList: with mocker.patch('awx.main.access.BaseAccess.can_read', mock_access): self.mock_view().check_permissions(self.mock_request()) mock_access.assert_called_once_with(mock_organization) + + +def test_related_search_reverse_FK_field(): + view = ListAPIView() + view.model = Credential + assert 'jobtemplates__search' in view.related_search_fields