Skip to content

Commit

Permalink
Backport django.core.serializers support
Browse files Browse the repository at this point in the history
  • Loading branch information
surenkov committed Jan 9, 2024
1 parent afe249d commit fad7baa
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 1 deletion.
4 changes: 4 additions & 0 deletions django_pydantic_field/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,10 @@ def formfield(self, **kwargs):
field_kwargs.update(kwargs)
return super().formfield(**field_kwargs)

def value_to_string(self, obj):
value = self.value_from_object(obj)
return self.get_prep_value(value)

def _resolve_schema(self, schema):
schema = t.cast(t.Type["base.ST"], GenericContainer.unwrap(schema))

Expand Down
29 changes: 28 additions & 1 deletion tests/test_e2e_models.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
from datetime import date

import pytest
from django.db.models import F, Q, JSONField, Value
from django.core import serializers
from django.db.models import F, JSONField, Q, Value

from .conftest import InnerSchema
from .test_app.models import SampleModel
Expand Down Expand Up @@ -52,6 +53,32 @@ def test_model_db_serde(initial_payload, expected_values):
assert instance_values == expected_values


@pytest.mark.parametrize("format", ["python", "json", "yaml", "jsonl"])
@pytest.mark.parametrize(
"payload",
[
{
"sample_field": InnerSchema(stub_str="abc", stub_list=[date(2023, 6, 1)]),
"sample_list": [InnerSchema(stub_str="abc", stub_list=[])],
},
{
"sample_field": {"stub_str": "abc", "stub_list": ["2023-06-01"]},
"sample_list": [{"stub_str": "abc", "stub_list": []}],
},
],
)
def test_model_serialization(payload, format):
instance = SampleModel(**payload)
instance_values = {k: getattr(instance, k) for k in payload.keys()}

serialized_instances = serializers.serialize(format, [instance])
deserialized_instance = next(serializers.deserialize(format, serialized_instances)).object
deserialized_values = {k: getattr(deserialized_instance, k) for k in payload.keys()}

assert instance_values == deserialized_values
assert serialized_instances == serializers.serialize(format, [deserialized_instance])


@pytest.mark.parametrize(
"lookup",
[
Expand Down

0 comments on commit fad7baa

Please sign in to comment.