diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 41d6105ca..8649881b5 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -767,6 +767,10 @@ class CharField(Field): return six.text_type(value) +class QueryParamField(CharField): + pass + + class EmailField(CharField): default_error_messages = { 'invalid': _('Enter a valid email address.') diff --git a/rest_framework/schemas.py b/rest_framework/schemas.py index afab8f71f..ce90b437e 100644 --- a/rest_framework/schemas.py +++ b/rest_framework/schemas.py @@ -590,10 +590,12 @@ class SchemaGenerator(object): if field.read_only or isinstance(field, serializers.HiddenField): continue + location = 'query' if isinstance(field, serializers.QueryParamField) else 'form' + required = field.required and method != 'PATCH' field = coreapi.Field( name=field.field_name, - location='form', + location=location, required=required, schema=field_to_schema(field) ) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 5bd9b6473..c4f49f0a2 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -57,7 +57,7 @@ from rest_framework.fields import ( # NOQA # isort:skip DictField, DurationField, EmailField, Field, FileField, FilePathField, FloatField, HiddenField, IPAddressField, ImageField, IntegerField, JSONField, ListField, ModelField, MultipleChoiceField, NullBooleanField, ReadOnlyField, RegexField, - SerializerMethodField, SlugField, TimeField, URLField, UUIDField, + SerializerMethodField, SlugField, TimeField, URLField, UUIDField, QueryParamField, ) from rest_framework.relations import ( # NOQA # isort:skip HyperlinkedIdentityField, HyperlinkedRelatedField, ManyRelatedField,