From 86579775b2bf5ccddab279761ecf59114d25c5a7 Mon Sep 17 00:00:00 2001 From: AlanCoding Date: Thu, 29 Mar 2018 10:55:43 -0400 Subject: [PATCH] field OPTIONS tip for filterability --- awx/api/metadata.py | 20 +++++++++++++------ awx/main/tests/functional/api/test_generic.py | 10 ++++++++++ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/awx/api/metadata.py b/awx/api/metadata.py index bc44deb6f0..ebeb5f3286 100644 --- a/awx/api/metadata.py +++ b/awx/api/metadata.py @@ -44,9 +44,9 @@ class Metadata(metadata.SimpleMetadata): if placeholder is not serializers.empty: field_info['placeholder'] = placeholder - # Update help text for common fields. serializer = getattr(field, 'parent', None) - if serializer: + if serializer and hasattr(serializer, 'Meta') and hasattr(serializer.Meta, 'model'): + # Update help text for common fields. field_help_text = { 'id': _('Database ID for this {}.'), 'name': _('Name of this {}.'), @@ -59,10 +59,18 @@ class Metadata(metadata.SimpleMetadata): 'modified': _('Timestamp when this {} was last modified.'), } if field.field_name in field_help_text: - if hasattr(serializer, 'Meta') and hasattr(serializer.Meta, 'model'): - opts = serializer.Meta.model._meta.concrete_model._meta - verbose_name = smart_text(opts.verbose_name) - field_info['help_text'] = field_help_text[field.field_name].format(verbose_name) + opts = serializer.Meta.model._meta.concrete_model._meta + verbose_name = smart_text(opts.verbose_name) + field_info['help_text'] = field_help_text[field.field_name].format(verbose_name) + # If field is not part of the model, then show it as non-filterable + else: + is_model_field = False + for model_field in serializer.Meta.model._meta.fields: + if field.field_name == model_field.name: + is_model_field = True + break + if not is_model_field: + field_info['filterable'] = False # Indicate if a field has a default value. # FIXME: Still isn't showing all default values? diff --git a/awx/main/tests/functional/api/test_generic.py b/awx/main/tests/functional/api/test_generic.py index 4d68b43ead..f445ee73f7 100644 --- a/awx/main/tests/functional/api/test_generic.py +++ b/awx/main/tests/functional/api/test_generic.py @@ -91,3 +91,13 @@ class TestDeleteViews: job.get_absolute_url(), user=system_auditor ) assert resp.status_code == 403 + + +@pytest.mark.django_db +def test_non_filterable_field(options, instance, admin_user): + r = options( + url=instance.get_absolute_url(), + user=admin_user + ) + field_info = r.data['actions']['GET']['percent_capacity_remaining'] + assert 'filterable' in field_info