thank you, very helpful. On Thursday, March 21, 2013 11:57:40 PM UTC+3:30, Niphlod wrote: > > just to clear out doubts..... > a field 'reference sometable' gets: > - a foreign key to the id of sometable > - a validator that by default builds up on the format argument of > sometable > > you CAN'T have a foreign key to a table and have the requires parameter > with is_in_db() building a string value. > So, if you want the 'origin' field to store the integer that is a pointer > to the countries.id table, while retaining the country_name while > representing it in the dropdown, you should do > > db.define_table('countries', > Field('country_name'), > format='%(country_name)s' > ) > db.define_table('testing', > Field('origin','reference countries') > > ) > > or > > db.define_table('countries', > Field('country_name'), > ) > db.define_table('testing', > Field('origin','reference countries',requires=IS_IN_DB( > db,'countries.id', '%(country_name)s',error_message='Choose origin > country')) > ) > > if you want testing.origin to be a string holding country names (so, not a > reference), with the dropdown showing the countries you have in the > countries table > > db.define_table('countries', > Field('country_name'), > ) > db.define_table('testing', > Field('origin',requires=IS_IN_DB( > db,'countries.country_name',error_message='Choose origin country')) > ) > > > > tl;dr your "mix and match" doesn't specify what you want. Field type > "trumps" the requires parameter on a database level. > > On Thursday, March 21, 2013 9:02:20 PM UTC+1, Cliff Kachinske wrote: >> >> The syntax may be correct per the manual, but IS_IN_DB tells Postgres to >> create a foreign key constraint on the field. If you look at the tables >> with psql or pgadmin you will see this is so. >> >> A foreign key constraint is always on the primary key of the foreign >> table. It has to be this way to guarantee uniqueness. >> >> This will work: >> >> countries = [r.countryname for r in >> db(somequery).select(db.countries.countryname)] >> >> db.testing.origin.requires = IS_IN_SET(countries) >> >> >> >> On Thursday, March 21, 2013 3:36:51 PM UTC-4, Alan Etkin wrote: >>> >>> > there is no string validator, i just use IS_IN_DB to create drop down >>> widget >>> >>> Yes, sorry, I checked the api and it seems you are using the correct >>> syntax. >>> >>> Does it work using IS_IN_DB (db, db.countries.country_name) instead? >>> >>
-- --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.