Closed
Description
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.