From 3cc390896af7d6d9d6cf29f7366ab67904a6f299 Mon Sep 17 00:00:00 2001 From: Eugen Zagorodniy Date: Sat, 12 Jun 2021 00:50:00 +0300 Subject: [PATCH] Make parent formid a part of autogenerated oid https://github.com/Pylons/deform/issues/394 --- deform/field.py | 3 ++- deform/form.py | 2 +- deform/tests/test_form.py | 19 +++++++++++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/deform/field.py b/deform/field.py index 750ab635..13f9ff5f 100644 --- a/deform/field.py +++ b/deform/field.py @@ -187,7 +187,6 @@ def __init__( ): self.counter = counter or itertools.count() self.order = next(self.counter) - self.oid = getattr(schema, "oid", "deformField%s" % self.order) self.schema = schema self.typ = schema.typ # required by Invalid exception self.name = schema.name @@ -225,6 +224,8 @@ def __init__( if parent is not None: parent = weakref.ref(parent) self._parent = parent + oid_prefix = getattr(self.get_root(), "formid", "deform") + self.oid = getattr(schema, "oid", f"{oid_prefix}Field{self.order}") self.__dict__.update(kw) first_input_index = -1 diff --git a/deform/form.py b/deform/form.py index 684b1905..d27321e6 100644 --- a/deform/form.py +++ b/deform/form.py @@ -139,6 +139,7 @@ def __init__( # Use kwargs to pass flags to descendant fields; saves cluttering # the constructor kw["focus"] = self.focus + self.formid = formid field.Field.__init__(self, schema, **kw) _buttons = [] for button in buttons: @@ -148,7 +149,6 @@ def __init__( self.action = action self.method = method self.buttons = _buttons - self.formid = formid self.use_ajax = use_ajax self.ajax_options = Markup(ajax_options.strip()) form_widget = getattr(schema, "widget", None) diff --git a/deform/tests/test_form.py b/deform/tests/test_form.py index b7e0b35d..ed8a0736 100644 --- a/deform/tests/test_form.py +++ b/deform/tests/test_form.py @@ -162,6 +162,25 @@ def test_issue_71(self): 1, ) + def test_issue_394(self): + # Pyramid + import colander + + # Deform + import deform + + class FooForm(colander.Schema): + foo_field = colander.SchemaNode(colander.String()) + + class BarForm(colander.Schema): + bar_field = colander.SchemaNode(colander.String()) + + foo_form = deform.Form(FooForm(), formid="fooForm") + bar_form = deform.Form(BarForm(), formid="barForm") + self.assertNotEqual( + foo_form["foo_field"].oid, bar_form["bar_field"].oid + ) + class TestButton(unittest.TestCase): def _makeOne(self, **kw):