From 12e293c3c79a47a32933f0365c3fef61a44ca52b Mon Sep 17 00:00:00 2001 From: Tim Graham Date: Tue, 6 May 2025 09:37:12 -0400 Subject: [PATCH] INTPYTHON-602 Fix QuerySet results of embedded model fields that have field converters Follow up to 4633a9eefd414b83f1b20b09194d5e96375c9b4d. --- django_mongodb_backend/operations.py | 4 +++- tests/model_fields_/test_embedded_model.py | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/django_mongodb_backend/operations.py b/django_mongodb_backend/operations.py index d9eabb9af..578429a2c 100644 --- a/django_mongodb_backend/operations.py +++ b/django_mongodb_backend/operations.py @@ -157,7 +157,9 @@ def convert_embeddedmodelfield_value(self, value, expression, connection): # Apply database converters to each field of the embedded model. for field in expression.output_field.embedded_model._meta.fields: field_expr = Expression(output_field=field) - converters = connection.ops.get_db_converters(field_expr) + converters = connection.ops.get_db_converters( + field_expr + ) + field_expr.get_db_converters(connection) for converter in converters: value[field.attname] = converter(value[field.attname], field_expr, connection) return value diff --git a/tests/model_fields_/test_embedded_model.py b/tests/model_fields_/test_embedded_model.py index 004eae00d..ec9f9dfc4 100644 --- a/tests/model_fields_/test_embedded_model.py +++ b/tests/model_fields_/test_embedded_model.py @@ -71,6 +71,11 @@ def test_save_load_null(self): obj = Holder.objects.get() self.assertIsNone(obj.data) + def test_save_load_json(self): + obj = Holder.objects.create(data=Data(json_value={"a": 1})) + obj.refresh_from_db() + self.assertEqual(obj.data.json_value, {"a": 1}) + def test_pre_save(self): """Field.pre_save() is called on embedded model fields.""" obj = Holder.objects.create(data=Data())