Skip to content

Commit 690cc4b

Browse files
committed
Make rest_framework.SchemaField aware of allow_null attribute
1 parent 4989fc8 commit 690cc4b

File tree

3 files changed

+12
-3
lines changed

3 files changed

+12
-3
lines changed

django_pydantic_field/rest_framework.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,12 @@ def __init__(
6969
config: t.Optional["base.ConfigType"] = None,
7070
**kwargs,
7171
):
72-
self.schema = field_schema = self._wrap_schema(schema, config)
72+
nullable = kwargs.get("allow_null", False)
73+
74+
self.schema = field_schema = self._wrap_schema(schema, config, nullable)
7375
self.decoder = base.SchemaDecoder(field_schema)
7476
self.export_params = self._extract_export_kwargs(kwargs, dict.pop)
77+
7578
super().__init__(**kwargs)
7679

7780
def to_internal_value(self, data) -> t.Optional["base.ST"]:

setup.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[metadata]
22
name = django-pydantic-field
3-
version = 0.1.6
3+
version = 0.1.7
44
url = https://github.com/surenkov/django-pydantic-field
55

66
description = Django JSONField with Pydantic models as a Schema

tests/test_drf_adapters.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,21 @@ def test_schema_field():
2626

2727
assert field.to_representation(existing_instance) == expected_encoded
2828
assert field.to_internal_value(expected_encoded) == existing_instance
29+
with pytest.raises(serializers.ValidationError):
30+
field.to_internal_value(None)
31+
with pytest.raises(serializers.ValidationError):
32+
field.to_internal_value("null")
2933

3034

3135
def test_field_schema_with_custom_config():
32-
field = rest_framework.SchemaField(InnerSchema, exclude={"stub_int"})
36+
field = rest_framework.SchemaField(InnerSchema, allow_null=True, exclude={"stub_int"})
3337
existing_instance = InnerSchema(stub_str="abc", stub_list=[date(2022, 7, 1)])
3438
expected_encoded = {"stub_str": "abc", "stub_list": [date(2022, 7, 1)]}
3539

3640
assert field.to_representation(existing_instance) == expected_encoded
3741
assert field.to_internal_value(expected_encoded) == existing_instance
42+
assert field.to_internal_value(None) is None
43+
assert field.to_internal_value("null") is None
3844

3945

4046
def test_serializer_marshalling_with_schema_field():

0 commit comments

Comments
 (0)