On Tue, May 26, 2009 11:49 am, Diez B. Roggisch wrote: > > On Tuesday 26 May 2009 16:04:09 Diego Woitasen wrote: >> On Tue, May 26, 2009 6:50 am, Diez B. Roggisch wrote: >> > On Tuesday 26 May 2009 03:28:14 Diego Woitasen wrote: >> >> Hi, >> >> I want to write a reusable form using TableForm as base class. I >> tried >> >> with this: >> >> >> >> class RuleForm(TableForm): >> >> def __init__(self, id=None, parent=None, children=[], >> host_filter=[], >> >> **kw): >> >> super(RuleForm, self).__init__(id,parent,children, **kw) self.fields = [ >> >> TextField(id = 'description', label = 'Description'), >> >> ] >> >> >> >> and this: >> >> >> >> class RuleForm(TableForm): >> >> def __init__(self, id=None, parent=None, children=[], >> host_filter=[], >> >> **kw): >> >> children = [ >> >> TextField(id = 'description', label = 'Description'), >> >> ] >> >> super(RuleForm, self).__init__(id,parent,children, **kw) >> >> >> >> without sucess. >> > >> > What does "without success" mean? You are aware, that in the latter example >> > you simply override whatever children are passed? >> > >> > Besides, the simple problem of yours seems to be solvable using >> > >> > >> > common_widgets = [...] # list of widgets >> > >> > some_form = Form(children = common_widgets + some_other_widgets] >> > >> > Diez >> Means, it doesn't work. If I use fields outside the constructor works, for >> example: >> class RuleForm(TableForm): >> fields = [ >> TextField(id = 'description', label = 'Description'), >> ] >> def __init__(self, id=None, parent=None, children=[], host_filter=[], >> **kw): >> super(RuleForm, self).__init__(id,parent,children, **kw) >> That works, but I need fields inside the constructor because I want to use >> SelectionList or CheckboxList which contents could change in each use of >> RuleForm (quering data from database). > > This is not intended to work. ToscaWidgets are instantiated once, and re-used. > > To make selectfields display varying values, use a callable as > options-parameter. > > def get_options(): > return some_options > > > class MyForm(TableForm): > class fields(WidgetList): > select_field = SingleSelectField(options=get_options) > > > Diez > > > >
I got "TypeError: 'function' object is not iterable". Anyway, I don't like that approach. What if a want to pass parameters to get_options()? I want to pass a SQLAlchemy query when the form is instantiated to condition the data to be returned i select fields. I think the solution at the moment is to write a function that return all childrens to pass to my form but I don't like it. I'm using TG2 RC1. -- Diego Woitasen XTECH - Soluciones Linux para empresas (54) 011 5219-0678 --~--~---------~--~----~------------~-------~--~----~ 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?hl=en -~----------~----~----~----~------~----~------~--~---

