diff --git a/djongo/models/fields.py b/djongo/models/fields.py
index 327de0267cf41290cd8f44135045d3adde94ec93..5c70ef4af12bf6acd8075843ee2ee954d70ec45a 100644
--- a/djongo/models/fields.py
+++ b/djongo/models/fields.py
@@ -138,6 +138,19 @@ class ModelField(MongoField):
                            value: dict,
                            *other_args):
         processed_value = {}
+        for field in self.model_container._meta.get_fields():
+            try:
+                field_value = value[field.attname]
+            except KeyError:
+                continue
+            processed_value[field.attname] = getattr(field, func_name)(field_value, *other_args)
+        return processed_value
+    
+    def _save_value_thru_fields(self,
+                                func_name: str,
+                                value: dict,
+                                *other_args):
+        processed_value = {}
         errors = {}
         for field in self.model_container._meta.get_fields():
             try:
@@ -212,8 +225,12 @@ class ModelField(MongoField):
         if not isinstance(value, self.base_type):
             raise ValueError(
                 f'Value: {value} must be an instance of {self.base_type}')
-        return self.get_prep_value(value)
 
+        processed_value = self._save_value_thru_fields('get_db_prep_save',
+                                                       value, 
+                                                       connection)
+        return processed_value
+     
     def get_prep_value(self, value):
         if (value is None or
                 not isinstance(value, self.base_type)):
diff --git a/tests/djongo_tests/test_project/xtest_app/tests/test_canvas.py b/tests/djongo_tests/test_project/xtest_app/tests/test_canvas.py
index 537cf2bd52bf50641273bd70ade68df479b01922..9b29d6bc27b09fe428afa6874a371f9d12f31851 100644
--- a/tests/djongo_tests/test_project/xtest_app/tests/test_canvas.py
+++ b/tests/djongo_tests/test_project/xtest_app/tests/test_canvas.py
@@ -1,44 +1,32 @@
-from django.test import TransactionTestCase
-from threading import Thread
-
-from xtest_app.models.canvas_models_id import ForeignKey1, ForeignKey2, DummyObject
-
-def make_request():
-    objects = DummyObject.objects.all()
-
-    print(objects)
-
-class MetaScanConcurrencyTest(TransactionTestCase):
-    def setUp(self):
-        foreign_key_1 = ForeignKey1.create(**{
-            "name": "foreign_key_1"
-        })
-
-        foreign_key_2 = ForeignKey2.create(**{
-            "name": "foreign_key_2"
-        })
-
-        foreign_key_1.save()
-        foreign_key_2.save()
-
-        for i in range(0, 1):
-            dummy = DummyObject.create(**{
-                "foreign_key_1": foreign_key_1,
-                "foreign_key_2": foreign_key_2
-            })
-
-            dummy.save()
-
-    def test_concurrency_test(self):
-        threads = []
-        for i in range(0, 100):
-            t = Thread(target=make_request)
-            threads.append(t)
-            t.start()
-            # Thread(target=make_request).start()
-
-        for thread in threads:
-            thread.join()
-        # objects = DummyObject.objects.all()
-        #
-        # print(objects)
\ No newline at end of file
+from django.db.models import QuerySet
+
+from . import TestCase
+from djongo import models
+
+class Team(models.Model):
+    id = models.TextField()
+    extra = models.JSONField(null=True)
+
+    class Meta:
+        abstract = True
+
+class DocumentQuerySet(QuerySet):
+    def from_team(self, team_id: str):
+        return self.filter(team={'id': team_id})
+
+class Document(models.Model):
+    team = models.EmbeddedField(model_container=Team)
+    objects = models.DjongoManager.from_queryset(DocumentQuerySet)()
+
+class Document2(models.Model):
+    team = models.CharField(max_length=10)
+    objects = models.DjongoManager.from_queryset(DocumentQuerySet)()
+
+class TestCanvas(TestCase):
+
+    def test_canvas(self):
+        entry = Document.objects.create(
+            team={'id': 'an id', 'extra': {'a': 1}}
+        )
+        b_entry = Document.objects.from_team('an id')
+        print(b_entry)
diff --git a/tests/djongo_tests/test_project/xtest_app/tests/test_models.py b/tests/djongo_tests/test_project/xtest_app/tests/test_models.py
index 239d68b76d31429c11c8faafa2cb14d659e6321d..b69efc2b028964812bf4aa8d4852fbf10e9127d4 100644
--- a/tests/djongo_tests/test_project/xtest_app/tests/test_models.py
+++ b/tests/djongo_tests/test_project/xtest_app/tests/test_models.py
@@ -1,8 +1,5 @@
 from unittest import skip
-
 from django.core.exceptions import ValidationError
-
-import xtest_app.models.basic_field
 from djongo.exceptions import NotSupportedError
 from xtest_app.models.basic_field import BasicBlog, BasicRelatedEntry, BasicAuthor
 from . import TestCase
@@ -20,8 +17,8 @@ class FieldTests(TestCase):
     headline_query: dict
     blog_query: dict
     mut: U[Type[models.Model], type]
-    entry: xtest_app.models.basic_field.EmbeddedFieldEntry
-    db_entry: xtest_app.models.basic_field.EmbeddedFieldEntry
+    entry: basic_field.EmbeddedFieldEntry
+    db_entry: basic_field.EmbeddedFieldEntry
 
     def get_model(self,
                   **embedded_field_kwargs) -> U[Type[models.Model], type]: