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