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()