Skip to content

Non-required serializer related fields #3976

@andrewyoung1991

Description

@andrewyoung1991

Checklist

  • I have verified that that issue exists against the master branch of Django REST framework.
  • I have searched for similar issues in both open and closed tickets and cannot find a duplicate.
  • This is not a usage question. (Those should be directed to the discussion group instead.)
  • This cannot be dealt with as a third party library. (We prefer new functionality to be in the form of third party libraries where possible.)
  • I have reduced the issue to the simplest possible case.
  • I have included a failing test as a pull request. (If you are unable to do so we can still accept the issue.)

Steps to reproduce

create a serializer that subclasses serializers.Serializer with a non-required primary key relation

class SearchSerializer(serializers.Serializer):
    q = serializers.CharField()
    user = serializers.PrimaryKeyRelatedField(queryset=User.objects.all(), required=False)

call the serializer in with a request that doesn't have a user parameter

serializer = SearchSerializer(data={"q": "hello world"})
serializer.is_valid(raise_exception=True)
print(serializer.data)  # <- KeyError 'user' is raised here

Expected behavior

the serializer should validate that the field q exists and ignore validating the user field if it is not supplied in the request data. The an example request

{
  "q": "hello world"
}

should be valid, and user should either be None or not included in the serializer.data

Actual behavior

the serializer raises a KeyError on serializer.data if user is not included in the request data.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions