Преглед на файлове

Fix FormField baked instance bug

theenglishway (time) преди 6 години
родител
ревизия
4b2edf6e41
променени са 3 файла, в които са добавени 9 реда и са изтрити 5 реда
  1. 4 0
      pydantic_form/form.py
  2. 4 4
      pydantic_form/translator.py
  3. 1 1
      tests/test_process.py

+ 4 - 0
pydantic_form/form.py

@@ -17,6 +17,10 @@ class PydanticForm(Form):
     def _baked_instance(self):
         return self.translator._schema
 
+    @_baked_instance.setter
+    def _baked_instance(self, value):
+        self.translator._schema = value
+
     def process(self, formdata=None, obj=None, data=None, **kwargs):
         super().process()
         formdata = self.meta.wrap_formdata(self, formdata)

+ 4 - 4
pydantic_form/translator.py

@@ -54,10 +54,10 @@ class SchemaToForm:
     def get_field(cls, form, key):
         for k in key:
             if is_int(k):
-                sub_form = form.entries[k]
+                field = form.entries[k]
             else:
-                sub_form = getattr(form, k)
-            return cls.get_field(sub_form, key[1:])
+                field = getattr(form, k)
+            return cls.get_field(field, key[1:])
 
         return form
 
@@ -82,7 +82,7 @@ class SchemaToForm:
         for k, field in iter_form(self.form, leafs_only=False):
             field = self.get_field(self.form, k)
             if isinstance(field, FormField):
-                field._baked_instance = self.get_schema(self.schema, k)
+                field.form._baked_instance = self.get_schema(self.schema, k)
 
     def set_errors(self):
         for path, error_list in nested_dict_iter(self.errors):

+ 1 - 1
tests/test_process.py

@@ -1,5 +1,5 @@
 import pytest
-from wtforms import FormField
+from wtforms import FormField, FieldList
 
 from pydantic_form.translator import iter_form, SchemaToForm
 from pydantic_form.utils import recursive_get, formdata_mangle, nested_dict_iter