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]> 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.

