On Sunday, December 11, 2011 1:53:11 PM UTC-5, tsvim wrote: > > db.define_table('table_settings', > Field('name','string'), > Field('default_value','string')) > > db.define_table('data', > > Field('parent_table',db.table_settings,writable=False,readable=False), > Field('datetime','datetime',default=request.now), > Field('title','string'), > Field('value','string')) > > db.data.value.default = db.table_settings['parent_table'].default_value > db.table_settings.default_value.requires = IS_IN_SET(['a','b']) >
It looks like you want the default value of db.data.value to be dependent on the particular parent_table selected. Obviously, this cannot be determined until after the parent_table has been selected. What do you want the user experience to be? Are you creating a form where the user will select a parent_table (i.e., one of the values stored in table_settings)? Upon selection, do you want the 'value' field to then be dynamically populated with the default_value from table_settings? If so, you'll need to set up an Ajax call on the client side. Another simpler alternative is using a computed field: Field('value', compute=lambda r: db.table_settings[r.parent_table].default_value) Note, by default, computed fields are not displayed in SQLFORMs. If you want the field to be displayed, you'll have to explicitly list the fields you want shown in the form. If the user leaves that field blank, the value will be computed as above -- otherwise, the user's submitted value will be inserted. Note, in this case, the user will not see any default value pre-populated in the field -- it will simply be blank and filled in on the server side after submission if no value has been entered. See http://web2py.com/book/default/chapter/06#Computed-Fields. Anthony