diff --git a/pydantic/typing.py b/pydantic/typing.py
--- a/pydantic/typing.py
+++ b/pydantic/typing.py
@@ -1,5 +1,4 @@
 import sys
-from enum import Enum
 from typing import (  # type: ignore
     TYPE_CHECKING,
     AbstractSet,
@@ -250,14 +249,6 @@ def display_as_type(v: Type[Any]) -> str:
     if not isinstance(v, typing_base) and not isinstance(v, GenericAlias) and not isinstance(v, type):
         v = v.__class__
 
-    if isinstance(v, type) and issubclass(v, Enum):
-        if issubclass(v, int):
-            return 'int'
-        elif issubclass(v, str):
-            return 'str'
-        else:
-            return 'enum'
-
     if isinstance(v, GenericAlias):
         # Generic alias are constructs like `list[int]`
         return str(v).replace('typing.', '')

diff --git a/tests/test_generics.py b/tests/test_generics.py
--- a/tests/test_generics.py
+++ b/tests/test_generics.py
@@ -1111,6 +1111,26 @@ class GModel(GenericModel, Generic[FieldType, ValueType]):
     assert m.dict() == {'field': {'foo': 'x'}}
 
 
+@skip_36
+def test_generic_enums():
+    T = TypeVar('T')
+
+    class GModel(GenericModel, Generic[T]):
+        x: T
+
+    class EnumA(str, Enum):
+        a = 'a'
+
+    class EnumB(str, Enum):
+        b = 'b'
+
+    class Model(BaseModel):
+        g_a: GModel[EnumA]
+        g_b: GModel[EnumB]
+
+    assert set(Model.schema()['definitions']) == {'EnumA', 'EnumB', 'GModel_EnumA_', 'GModel_EnumB_'}
+
+
 @skip_36
 def test_generic_with_user_defined_generic_field():
     T = TypeVar('T')
diff --git a/tests/test_utils.py b/tests/test_utils.py
--- a/tests/test_utils.py
+++ b/tests/test_utils.py
@@ -6,7 +6,6 @@
 import sys
 from copy import copy, deepcopy
 from distutils.version import StrictVersion
-from enum import Enum
 from typing import Callable, Dict, List, NewType, Tuple, TypeVar, Union
 
 import pytest
@@ -76,33 +75,6 @@ def test_display_as_type_generic_alias():
     assert display_as_type(list[[Union[str, int]]]) == 'list[[Union[str, int]]]'
 
 
-def test_display_as_type_enum():
-    class SubField(Enum):
-        a = 1
-        b = 'b'
-
-    displayed = display_as_type(SubField)
-    assert displayed == 'enum'
-
-
-def test_display_as_type_enum_int():
-    class SubField(int, Enum):
-        a = 1
-        b = 2
-
-    displayed = display_as_type(SubField)
-    assert displayed == 'int'
-
-
-def test_display_as_type_enum_str():
-    class SubField(str, Enum):
-        a = 'a'
-        b = 'b'
-
-    displayed = display_as_type(SubField)
-    assert displayed == 'str'
-
-
 def test_lenient_issubclass():
     class A(str):
         pass

Schema generation with GenericModel and multiple enums is broken since 1.8.0
### Checks

* [X] I added a descriptive title to this issue
* [X] I have searched (google, github) for similar issues and couldn't find anything
* [X] I have read and followed [the docs](https://pydantic-docs.helpmanual.io/) and still think this is a bug

<!-- Sorry to sound so draconian, but every second saved replying to issues is time spend improving pydantic :-) -->

# Bug

Since pydantic 1.8.0 schema generation with `GenericModel` and multiple `Enum` fields using this GenericModel fails with a `KeyError`. I have tried the fix in https://github.com/samuelcolvin/pydantic/pull/2536 but this seems to be another corner case that has to be fixed.

Output of `python -c "import pydantic.utils; print(pydantic.utils.version_info())"`:
```
             pydantic version: 1.8.1
            pydantic compiled: True
                 install path: /Users/philipp/.pyenv/versions/3.7.10/envs/pydantic_schema_error@3.7.10/lib/python3.7/site-packages/pydantic
               python version: 3.7.10 (default, Mar  4 2021, 21:37:12)  [Clang 12.0.0 (clang-1200.0.32.29)]
                     platform: Darwin-20.3.0-x86_64-i386-64bit
     optional deps. installed: ['typing-extensions']
```
<!-- or if you're using pydantic prior to v1.3, manually include: OS, python version and pydantic version -->

<!-- Please read the [docs](https://pydantic-docs.helpmanual.io/) and search through issues to
confirm your bug hasn't already been reported. -->

<!-- Where possible please include a self-contained code snippet describing your bug: -->

```py
from enum import Enum
from typing import TypeVar, Generic, Optional
from pydantic import BaseModel
from pydantic.generics import GenericModel

ConfigValueT = TypeVar("ConfigValueT")


class ConfigOption(GenericModel, Generic[ConfigValueT]):
    value: ConfigValueT
    value_source: str


class EnumA(str, Enum):
    a = "a"
    aa = "aa"


class EnumB(str, Enum):
    b = "b"
    bb = "bb"


class TestModel(BaseModel):
    option_a: ConfigOption[EnumA]
    option_b: ConfigOption[EnumB]  # it also works with only `option_a` but not with multiple


print(TestModel.schema_json())  # This works until 1.7.3 but crashes on 1.8+
```

This results in a `KeyError`:

```
Traceback (most recent call last):
  File "test.py", line 29, in <module>
    print(TestModel.schema_json())  # This works until 1.7.3 but crashes on 1.8+
  File "pydantic/main.py", line 715, in pydantic.main.BaseModel.schema_json
  File "pydantic/main.py", line 704, in pydantic.main.BaseModel.schema
  File "pydantic/schema.py", line 167, in pydantic.schema.model_schema
  File "pydantic/schema.py", line 548, in pydantic.schema.model_process_schema
  File "pydantic/schema.py", line 589, in pydantic.schema.model_type_schema
  File "pydantic/schema.py", line 241, in pydantic.schema.field_schema
  File "pydantic/schema.py", line 495, in pydantic.schema.field_type_schema
  File "pydantic/schema.py", line 839, in pydantic.schema.field_singleton_schema
KeyError: <class '__main__.ConfigOption[str]'>
```

Thank you for your work on this amazing library!

tests/test_generics.py::test_generic_enums
tests/test_generics.py::test_generic_name tests/test_generics.py::test_double_parameterize_error tests/test_generics.py::test_value_validation tests/test_generics.py::test_methods_are_inherited tests/test_generics.py::test_config_is_inherited tests/test_generics.py::test_default_argument tests/test_generics.py::test_default_argument_for_typevar tests/test_generics.py::test_classvar tests/test_generics.py::test_non_annotated_field tests/test_generics.py::test_must_inherit_from_generic tests/test_generics.py::test_parameters_placed_on_generic tests/test_generics.py::test_parameters_must_be_typevar tests/test_generics.py::test_subclass_can_be_genericized tests/test_generics.py::test_parameter_count tests/test_generics.py::test_cover_cache tests/test_generics.py::test_generic_config tests/test_generics.py::test_enum_generic tests/test_generics.py::test_generic tests/test_generics.py::test_alongside_concrete_generics tests/test_generics.py::test_complex_nesting tests/test_generics.py::test_required_value tests/test_generics.py::test_optional_value tests/test_generics.py::test_custom_schema tests/test_generics.py::test_child_schema tests/test_generics.py::test_custom_generic_naming tests/test_generics.py::test_nested tests/test_generics.py::test_partial_specification tests/test_generics.py::test_partial_specification_with_inner_typevar tests/test_generics.py::test_partial_specification_name tests/test_generics.py::test_partial_specification_instantiation tests/test_generics.py::test_partial_specification_instantiation_bounded tests/test_generics.py::test_typevar_parametrization tests/test_generics.py::test_multiple_specification tests/test_generics.py::test_generic_subclass_of_concrete_generic tests/test_generics.py::test_generic_model_pickle tests/test_generics.py::test_generic_model_from_function_pickle_fail tests/test_generics.py::test_generic_model_redefined_without_cache_fail tests/test_generics.py::test_get_caller_frame_info tests/test_generics.py::test_get_caller_frame_info_called_from_module tests/test_generics.py::test_get_caller_frame_info_when_sys_getframe_undefined tests/test_generics.py::test_iter_contained_typevars tests/test_generics.py::test_nested_identity_parameterization tests/test_generics.py::test_replace_types tests/test_generics.py::test_replace_types_with_user_defined_generic_type_field tests/test_generics.py::test_replace_types_identity_on_unchanged tests/test_generics.py::test_deep_generic tests/test_generics.py::test_deep_generic_with_inner_typevar tests/test_generics.py::test_deep_generic_with_referenced_generic tests/test_generics.py::test_deep_generic_with_referenced_inner_generic tests/test_generics.py::test_deep_generic_with_multiple_typevars tests/test_generics.py::test_deep_generic_with_multiple_inheritance tests/test_generics.py::test_generic_with_referenced_generic_type_1 tests/test_generics.py::test_generic_with_referenced_nested_typevar tests/test_generics.py::test_generic_with_callable tests/test_generics.py::test_generic_with_partial_callable tests/test_generics.py::test_generic_recursive_models tests/test_generics.py::test_generic_enum tests/test_generics.py::test_generic_literal tests/test_generics.py::test_generic_with_user_defined_generic_field tests/test_generics.py::test_generic_annotated tests/test_utils.py::test_import_module tests/test_utils.py::test_import_module_invalid tests/test_utils.py::test_import_no_attr tests/test_utils.py::test_display_as_type[str-str] tests/test_utils.py::test_display_as_type[string-str] tests/test_utils.py::test_display_as_type[value2-Union[str, tests/test_utils.py::test_display_as_type[list-list] tests/test_utils.py::test_display_as_type_generic_alias tests/test_utils.py::test_lenient_issubclass tests/test_utils.py::test_lenient_issubclass_with_generic_aliases tests/test_utils.py::test_lenient_issubclass_is_lenient tests/test_utils.py::test_truncate[object-<class tests/test_utils.py::test_truncate[abcdefghijklmnopqrstuvwxyz-'abcdefghijklmnopq\u2026'] tests/test_utils.py::test_truncate[input_value2-[0, tests/test_utils.py::test_unique_list[input_value0-output0] tests/test_utils.py::test_unique_list[input_value1-output1] tests/test_utils.py::test_unique_list[input_value2-output2] tests/test_utils.py::test_value_items tests/test_utils.py::test_value_items_merge[base0-override0-False-expected0] tests/test_utils.py::test_value_items_merge[None-None-False-None] tests/test_utils.py::test_value_items_merge[base2-override2-False-expected2] tests/test_utils.py::test_value_items_merge[base3-None-False-expected3] tests/test_utils.py::test_value_items_merge[None-override4-False-expected4] tests/test_utils.py::test_value_items_merge[None-override5-False-expected5] tests/test_utils.py::test_value_items_merge[base6-None-False-expected6] tests/test_utils.py::test_value_items_merge[base7-override7-False-expected7] tests/test_utils.py::test_value_items_merge[base8-override8-False-expected8] tests/test_utils.py::test_value_items_merge[base9-override9-False-expected9] tests/test_utils.py::test_value_items_merge[base10-override10-False-expected10] tests/test_utils.py::test_value_items_merge[base11-override11-False-expected11] tests/test_utils.py::test_value_items_merge[base12-override12-False-expected12] tests/test_utils.py::test_value_items_merge[base13-override13-False-expected13] tests/test_utils.py::test_value_items_merge[base14-override14-False-expected14] tests/test_utils.py::test_value_items_merge[base15-override15-False-expected15] tests/test_utils.py::test_value_items_merge[base16-override16-True-expected16] tests/test_utils.py::test_value_items_merge[None-None-True-None] tests/test_utils.py::test_value_items_merge[base18-override18-True-expected18] tests/test_utils.py::test_value_items_merge[base19-None-True-expected19] tests/test_utils.py::test_value_items_merge[None-override20-True-expected20] tests/test_utils.py::test_value_items_merge[None-override21-True-expected21] tests/test_utils.py::test_value_items_merge[base22-None-True-expected22] tests/test_utils.py::test_value_items_merge[base23-override23-True-expected23] tests/test_utils.py::test_value_items_merge[base24-override24-True-expected24] tests/test_utils.py::test_value_items_merge[base25-override25-True-expected25] tests/test_utils.py::test_value_items_merge[base26-override26-True-expected26] tests/test_utils.py::test_value_items_merge[base27-override27-True-expected27] tests/test_utils.py::test_value_items_merge[base28-override28-True-expected28] tests/test_utils.py::test_value_items_merge[base29-override29-True-expected29] tests/test_utils.py::test_value_items_merge[base30-override30-True-expected30] tests/test_utils.py::test_value_items_merge[base31-override31-True-expected31] tests/test_utils.py::test_value_items_merge[base32-True-False-True] tests/test_utils.py::test_value_items_merge[True-override33-False-expected33] tests/test_utils.py::test_value_items_merge[True-None-False-True] tests/test_utils.py::test_value_items_merge[base35-override35-False-expected35] tests/test_utils.py::test_value_items_error tests/test_utils.py::test_is_new_type tests/test_utils.py::test_new_type_supertype tests/test_utils.py::test_pretty tests/test_utils.py::test_pretty_color tests/test_utils.py::test_devtools_output tests/test_utils.py::test_devtools_output_validation_error tests/test_utils.py::test_deep_update[mapping0-updating_mapping0-expected_mapping0-extra tests/test_utils.py::test_deep_update[mapping1-updating_mapping1-expected_mapping1-values tests/test_utils.py::test_deep_update[mapping2-updating_mapping2-expected_mapping2-values tests/test_utils.py::test_deep_update[mapping3-updating_mapping3-expected_mapping3-deeply tests/test_utils.py::test_deep_update_is_not_mutating tests/test_utils.py::test_undefined_repr tests/test_utils.py::test_undefined_copy tests/test_utils.py::test_get_model tests/test_utils.py::test_version_info tests/test_utils.py::test_version_strict tests/test_utils.py::test_class_attribute tests/test_utils.py::test_all_literal_values tests/test_utils.py::test_path_type tests/test_utils.py::test_path_type_unknown tests/test_utils.py::test_smart_deepcopy_immutable_non_sequence[10] tests/test_utils.py::test_smart_deepcopy_immutable_non_sequence[1.0] tests/test_utils.py::test_smart_deepcopy_immutable_non_sequence[11] tests/test_utils.py::test_smart_deepcopy_immutable_non_sequence[12] tests/test_utils.py::test_smart_deepcopy_immutable_non_sequence[int] tests/test_utils.py::test_smart_deepcopy_immutable_non_sequence[None] tests/test_utils.py::test_smart_deepcopy_immutable_non_sequence[test_all_literal_values] tests/test_utils.py::test_smart_deepcopy_immutable_non_sequence[len] tests/test_utils.py::test_smart_deepcopy_immutable_non_sequence[obj8] tests/test_utils.py::test_smart_deepcopy_immutable_non_sequence[<lambda>] tests/test_utils.py::test_smart_deepcopy_immutable_non_sequence[obj10] tests/test_utils.py::test_smart_deepcopy_empty_collection[empty_collection0] tests/test_utils.py::test_smart_deepcopy_empty_collection[empty_collection1] tests/test_utils.py::test_smart_deepcopy_empty_collection[empty_collection2] tests/test_utils.py::test_smart_deepcopy_empty_collection[empty_collection3] tests/test_utils.py::test_smart_deepcopy_empty_collection[empty_collection4] tests/test_utils.py::test_smart_deepcopy_empty_collection[empty_collection5] tests/test_utils.py::test_smart_deepcopy_empty_collection[empty_collection6] tests/test_utils.py::test_smart_deepcopy_empty_collection[empty_collection7] tests/test_utils.py::test_smart_deepcopy_collection[collection0] tests/test_utils.py::test_smart_deepcopy_collection[collection1] tests/test_utils.py::test_smart_deepcopy_collection[collection2] tests/test_utils.py::test_smart_deepcopy_collection[collection3] tests/test_utils.py::test_smart_deepcopy_collection[collection4] tests/test_utils.py::test_smart_deepcopy_collection[collection5] tests/test_utils.py::test_smart_deepcopy_collection[collection6] tests/test_utils.py::test_smart_deepcopy_collection[collection7] tests/test_utils.py::test_get_origin[input_value0-Annotated] tests/test_utils.py::test_get_origin[input_value1-Callable] tests/test_utils.py::test_get_origin[input_value2-dict] tests/test_utils.py::test_get_origin[input_value3-list] tests/test_utils.py::test_get_origin[input_value4-output_value4] tests/test_utils.py::test_get_origin[int-None] tests/test_utils.py::test_get_args[ConstrainedListValue-output_value0] tests/test_utils.py::test_get_args[ConstrainedList-output_value1] tests/test_utils.py::test_get_args[input_value2-output_value2] tests/test_utils.py::test_get_args[input_value3-output_value3] tests/test_utils.py::test_get_args[int-output_value4] tests/test_utils.py::test_get_args[input_value5-output_value5] tests/test_utils.py::test_get_args[input_value6-output_value6] tests/test_utils.py::test_get_args[input_value7-output_value7] tests/test_utils.py::test_get_args[input_value8-output_value8] tests/test_utils.py::test_resolve_annotations_no_module tests/test_utils.py::test_all_identical tests/test_utils.py::test_undefined_pickle