After a little investigation, my form with multiple fieldsets returns
a nested dictionary when it is submitted, whereas the table form with
multiple fieldsets returns a flat dictionary.

Interesting.

Ed

On 08/05/06, Ed Singleton <[EMAIL PROTECTED]> wrote:
> Well, the form now works fine with values being passed in like there's
> no tomorrow.
>
> However the multi fieldset table form I wrote, only seems to accept a
> flat list of values, rather than a nested list, which is nice in some
> ways, but it's annoying that it is different to the other form.
>
> from turbogears.widgets import *
>
> class MultiFieldSetTable(TableForm):
>     template = """
>         <form xmlns:py="http://purl.org/kid/ns#";
>             name="${name}"
>             action="${action}"
>             method="${method}"
>             class="tableform"
>             py:attrs="form_attrs"
>         >
>             <table py:attrs="table_attrs">
>             <tbody py:for="fieldset in fieldsets" py:strip="True">
>                 <tr py:if="fieldset.legend">
>                       <td colspan="2">
>                         <h1 py:content="fieldset.legend">This is a 
> Heading</h1>
>                     <div py:for="field in hidden_fields"
>                           py:replace="field.display(value_for(field),
> **params_for(field))"
>                       />
>                     </td>
>                     </tr>
>                     <tr py:for="i, field in enumerate(fieldset.fields)"
>                         class="${i%2 and 'odd' or 'even'}"
>                     >
>                         <td>
>                             <label class="fieldlabel"
> for="${field.field_id}" py:content="field.label" />
>                         </td>
>                         <td>
>                             <span
> py:replace="field.display(value_for(field), **params_for(field))" />
>                             <span py:if="error_for(field)"
> class="fielderror" py:content="error_for(field)" />
>                             <span py:if="field.help_text" class="fieldhelp"
> py:content="field.help_text" />
>                         </td>
>                     </tr>
>                     </tbody>
>                 </table>
>             </form>
>     """
>     member_widgets = ["fieldsets"]
>     fieldsets = []
>
> class FS1(WidgetsList):
>    f1 = TextField()
>
> class FS2(WidgetsList):
>    f2 = TextField()
>
> class MyForm(WidgetsList):
>    fs1 = FieldSet(fields=FS1())
>    fs2 = FieldSet(fields=FS2())
>
> myform = MultiFieldSetTable(fieldsets=(MyForm()))
>
> nestedvalues = dict(fs1=dict(f1="one"),fs2=dict(f2="two"))
> flatvalues = dict(f1="one",f2="two")
>
> assert "one" in myform.render(value=nestedvalues)
> assert "two" in myform.render(value=nestedvalues)
> assert "one" in myform.render(value=flatvalues)
> assert "two" in myform.render(value=flatvalues)
>
> Gives me:
>
> >>> assert "one" in myform.render(value=nestedvalues)
> Traceback (most recent call last):
>   File "<console>", line 1, in ?
> AssertionError
> >>> assert "two" in myform.render(value=nestedvalues)
> Traceback (most recent call last):
>   File "<console>", line 1, in ?
> AssertionError
> >>> assert "one" in myform.render(value=flatvalues)
> >>> assert "two" in myform.render(value=flatvalues)
> >>>
>
> Is there an easy way to fix this?
>
> Thanks
>
> Ed
>
> On 08/05/06, Michele Cella <[EMAIL PROTECTED]> wrote:
> >
> > Hi Ed,
> >
> > 1) change:
> >
> > params = ["fieldsets"]
> >
> > to:
> >
> > member_widgets = ["fieldsets"]
> >
> > I told you about this in your last thread but you probably missed it,
> > it's quite important since fieldsets are not simple params but member
> > widgets of your form, you need this for validating and passing values,
> > also member_widgets are not overridable at render/display time.
> >
> > 2) change:
> >
> > values=myformvalues
> >
> > to:
> >
> > value=myformvalues
> >
> > I also suggest to change:
> >
> > fieldsets=(MyForm())
> >
> > into:
> >
> > fieldsets=MyForm()
> >
> > but that's not a big problem.
> >
> > Ciao
> > Michele
> >
> > Ed Singleton wrote:
> > > I can't seem to pass values into a nested forms.  It's probably a
> > > simple error on my part but I can't work it out to save my life.
> > >
> > > from turbogears.widgets import *
> > >
> > > class MultiFieldSet(Form):
> > >     template = """
> > >         <form xmlns:py="http://purl.org/kid/ns#";
> > >             name="${name}"
> > >             action="${action}"
> > >             method="${method}"
> > >             class="tableform"
> > >             py:attrs="form_attrs"
> > >         >
> > >         <div py:for="fieldset in fieldsets"
> > >             py:replace="fieldset.display(value_for(fieldset),
> > > **params_for(fieldset))"
> > >         />
> > >
> > >     </form>
> > >     """
> > >     params = ["fieldsets"]
> > >     fieldsets = []
> > >
> > > class FS1(WidgetsList):
> > >     f1 = TextField()
> > >
> > > class FS2(WidgetsList):
> > >     f2 = TextField()
> > >
> > > class MyForm(WidgetsList):
> > >     fs1 = FieldSet(fields=FS1())
> > >     fs2 = FieldSet(fields=FS2())
> > >
> > > myform = MultiFieldSet(fieldsets=(MyForm()))
> > >
> > > myformvalues = dict(fs1=dict(f1="one"),fs2=dict(f2="two"))
> > >
> > > assert "one" in myform.render(values=myformvalues)
> > >
> > > The assert fails for me.
> > >
> > > Any help would be greatly appreciated
> > >
> > > Thanks
> > >
> > > Ed
> >
> >
> > > >
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"TurboGears" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/turbogears
-~----------~----~----~----~------~----~------~--~---

Reply via email to