-
-
Notifications
You must be signed in to change notification settings - Fork 7k
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
Run this:
from rest_framework import serializers
class ChildSerializer(serializers.Serializer):
id = serializers.IntegerField()
class ParentSerializer(serializers.Serializer):
ids = ChildSerializer(many=True, allow_empty=False)
serializer = ParentSerializer(data={'ids': []}, partial=True)
serializer.is_valid()
Expected behavior
serializer.is_valid()
should return False (as it does when partial=False
) because empty values are not allowed.
Actual behavior
It returns True.
I tracked it down to this line and this PR.
I believe it an empty list should not be valid because partial=True
is usually about being able to specify a subset of keys. If a value is provided it should still go through the usual validation (in the same way that partial=True
does not override allow_null=False
).
The documentation for allow_empty
does not mention this behaviour either: https://www.django-rest-framework.org/api-guide/serializers/#allow_empty
qilyn
Metadata
Metadata
Assignees
Labels
No labels