From b38d3e68054c6670b8e52158bb514b60b101c099 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cristi=20V=C3=AEjdea?= Date: Fri, 23 Feb 2018 18:51:55 +0200 Subject: [PATCH] Do not set pattern on non-string values Fixes #68 --- src/drf_yasg/generators.py | 4 ++-- src/drf_yasg/inspectors/field.py | 5 ++++- testproj/todo/views.py | 3 +++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/drf_yasg/generators.py b/src/drf_yasg/generators.py index 55a51a5..84db625 100644 --- a/src/drf_yasg/generators.py +++ b/src/drf_yasg/generators.py @@ -405,8 +405,8 @@ class OpenAPISchemaGenerator(object): for variable in uritemplate.variables(path): model, model_field = get_queryset_field(queryset, variable) attrs = get_basic_type_info(model_field) or {'type': openapi.TYPE_STRING} - if hasattr(view_cls, 'lookup_value_regex') and getattr(view_cls, 'lookup_field', None) == variable: - attrs['pattern'] = view_cls.lookup_value_regex + if getattr(view_cls, 'lookup_field', None) == variable and attrs['type'] == openapi.TYPE_STRING: + attrs['pattern'] = getattr(view_cls, 'lookup_value_regex', attrs.get('pattern', None)) if model_field and model_field.help_text: description = force_text(model_field.help_text) diff --git a/src/drf_yasg/inspectors/field.py b/src/drf_yasg/inspectors/field.py index cfe15a8..4005d1a 100644 --- a/src/drf_yasg/inspectors/field.py +++ b/src/drf_yasg/inspectors/field.py @@ -361,7 +361,10 @@ def get_basic_type_info(field): else: # pragma: no cover return None - pattern = find_regex(field) if format in (None, openapi.FORMAT_SLUG) else None + pattern = None + if swagger_type == openapi.TYPE_STRING and format in (None, openapi.FORMAT_SLUG): + pattern = find_regex(field) + limits = find_limits(field) result = OrderedDict([ diff --git a/testproj/todo/views.py b/testproj/todo/views.py index 2e2d26c..7de6a52 100644 --- a/testproj/todo/views.py +++ b/testproj/todo/views.py @@ -8,6 +8,9 @@ class TodoViewSet(viewsets.ReadOnlyModelViewSet): queryset = Todo.objects.all() serializer_class = TodoSerializer + lookup_field = 'id' + lookup_value_regex = '[0-9]+' + class TodoAnotherViewSet(viewsets.ReadOnlyModelViewSet): queryset = TodoAnother.objects.all()