Skip to content

Commit 9ac6463

Browse files
committed
Resolve empty HTML charfield behavior. Closes encode#3318.
1 parent f601c6c commit 9ac6463

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

rest_framework/fields.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -385,8 +385,10 @@ def get_value(self, dictionary):
385385
# If the field is blank, and null is a valid value then
386386
# determine if we should use null instead.
387387
return '' if getattr(self, 'allow_blank', False) else None
388-
elif ret == '' and self.default:
389-
return empty
388+
elif ret == '' and not self.required:
389+
# If the field is blank, and emptyness is valid then
390+
# determine if we should use emptyness instead.
391+
return '' if getattr(self, 'allow_blank', False) else empty
390392
return ret
391393
return dictionary.get(self.field_name, empty)
392394

tests/test_fields.py

+17-1
Original file line numberDiff line numberDiff line change
@@ -253,14 +253,30 @@ class TestSerializer(serializers.Serializer):
253253

254254

255255
class TestHTMLInput:
256-
def test_empty_html_charfield(self):
256+
def test_empty_html_charfield_with_default(self):
257257
class TestSerializer(serializers.Serializer):
258258
message = serializers.CharField(default='happy')
259259

260260
serializer = TestSerializer(data=QueryDict(''))
261261
assert serializer.is_valid()
262262
assert serializer.validated_data == {'message': 'happy'}
263263

264+
def test_empty_html_charfield_without_default(self):
265+
class TestSerializer(serializers.Serializer):
266+
message = serializers.CharField(allow_blank=True)
267+
268+
serializer = TestSerializer(data=QueryDict('message='))
269+
assert serializer.is_valid()
270+
assert serializer.validated_data == {'message': ''}
271+
272+
def test_empty_html_charfield_without_default_not_required(self):
273+
class TestSerializer(serializers.Serializer):
274+
message = serializers.CharField(allow_blank=True, required=False)
275+
276+
serializer = TestSerializer(data=QueryDict('message='))
277+
assert serializer.is_valid()
278+
assert serializer.validated_data == {'message': ''}
279+
264280
def test_empty_html_integerfield(self):
265281
class TestSerializer(serializers.Serializer):
266282
message = serializers.IntegerField(default=123)

0 commit comments

Comments
 (0)