Well, it's a thought, but despite the fact that I called the options of the select "option 1", "option 2", and "option 3" in my posting, it's a real project, and the item in the MultipleSelectField needs to allow multiple responses.
Matthew On Tue, Aug 9, 2011 at 3:15 PM, Damien Accorsi <[email protected]>wrote: > ** > By the way, if you are new to Tosca Widgets, I would recommend to start by > using "simple" widgets like TextField, SingleSelectField, etc. The > mechanisms are not always easy to understand, so the firsts steps should be > to use simple widgets with static data, then go into complex widgets with > dynamic data. > > Le 09/08/2011 21:11, Damien Accorsi a écrit : > > Matthew, > > In your templates you should have something like this: > ${tmpl_context.sample_form(ldPrefilledData, child_args=ldChildArgs)} > > Where : > * ldPrefilledData is a dictionnary containing the preselected values > * ldChildArgs is a dictionnary containing the available values > > In your case, you should have something like: > * ldChildArgs = { 'location': {'option 1', 'option 2', 'option 3'}} > * ldPrefilledData = { 'location': {'option 1', 'option 2'}} > > This should work. > > Damien > > Le 09/08/2011 20:40, MHCPU a écrit : > > I hope someone will tell me how to pass which options are selected > into a MultipleSelectField. I can see that the values being passed > into update_params is a list of SQLAlchemy ORM objects. It seems like > it needs to be a list of strings instead, but I'm not sure how to make > that happen. > > Matthew > > On Aug 9, 11:19 am, MHCPU <[email protected]> <[email protected]> > wrote: > > Could someone tell me how to get the selections in a > MultipleSelectField to reflect the values coming from the database? > The selections get saved to the database fine, but they don't get set > in the form when I give the form an existing set of data. > > For example, I have a Sample table, with a one-to-many relation to the > Location table. If the Location table has two records, with the > "some_attribute" field having the values "option 1" and "option 2", I > want those two options to be selected in the MultipleSelectField for > "some_attribute" when I display the form. > > I'm not sure how the MultipleFieldSelect would even know that the data > is supposed to come from the "some_attribute" field of the Location > table, which is probably why it doesn't work. When I create the > Sample object for insertion to the database, I have to make a list of > Location objects and assign them to the new Sample. Do I have to do > the reverse when I get a Sample from the database, in order to pass a > list to the form? How would I pass it? > > Any help appreciated. > > - Matthew > > Tables: > > class Sample(DeclarativeBase): > __tablename__ = 'sample' > id = Column(Integer, primary_key=True) > sampleNumber = Column(Unicode, index=True, unique=True, > nullable=False) > location = relation('Location', backref='sample', > order_by='Location.id') > > class Location(DeclarativeBase): > __tablename__ = 'location' > id = Column(Integer, primary_key=True) > sample_id = Column(Unicode, ForeignKey('sample.id')) > some_attribute = Column(Unicode) > > Form: > > class SampleForm(TableForm, twd.CustomisedForm): > ... > location = MultipleSelectField('some_attribute', > options=['option 1', 'option 2', 'option 3']) > > Controller: > > class RootController(BaseController): > > @validate(sample_form.create_sample_form, error_handler=create) > @expose() > def create_sample(self, **kw): > """Create a new sample record""" > > locationList = [] > for ll in kw['location']: > newLocation = Location(some_attribute=ll) > locationList.append(newLocation) > > new = Sample( > sampleNumber = kw['sampleNumber'], > location = locationList, > ) > > DBSession.add(new) > > flash( '''Added sample: %s'''%( kw['sampleNumber'], )) > redirect( './index' ) > > @expose('myproject.templates.update') > def update(self, sampleNumber, **kw): > """Display the form for updating a sample, with values from > the database.""" > > tmpl_context.sample_form = sample_form.update_sample_form > > sample = > DBSession.query(Sample).filter_by(sampleNumber=sampleNumber).one() > > return dict(sample=sample) > > > -- > 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. > > > -- 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.

