Race condition, whoops! Thanks for that Massimo, I knew that should be in there somewhere! :-)
On Apr 4, 3:23 pm, "web2py <<<at>>> technicalbloke.com" <[email protected]> wrote: > OK, so I just cobbled this together and it seems to work though I'm > sure not in all cases... > > def DBINPUT(table_field): > types = { "string":"text", "blob":"file", "boolean":"checkbox", > "integer":"text", "double":"text", "date":"text", > "time":"text", "datetime":"text", > "password":"password", "upload":"file", "reference":"file" } > return INPUT(_type=types[table_field.type], > _name=table_field.name, requires=table_field.requires) > > This enables me to write this in my controller and have it pick up the > validators from the model... > form = FORM(TABLE( > TR( "Name:", DBINPUT(db.CONTACTS.contact_name) ), > TR( "Email:", DBINPUT(db.EMAIL_ADDRESSES.email_address), > DBINPUT(db.EMAIL_ADDRESSES.the_default), "(set as default)" ), > TR( "", INPUT(_type='submit',_value='SUBMIT') ) > ) ) > > Is there an easier/better way I can do this? If not, comments and > suggestions how I can improve this method would me warmly welcomed :) > > Roger. > > On Apr 4, 1:00 pm, "web2py <<<at>>> technicalbloke.com" > > <[email protected]> wrote: > > Or maybe an addition to the INPUT helper could turn... > > > INPUT(_type="text", name="contact_name", requires=[ IS_NOT_EMPTY(), > > IS_LENGTH(255,error_message=T('name too long, max(255)')) ] > > > into > > > INPUT(from_model="db.CONTACTS.contact_name") > > > ? > > > Sorry for blathering on BTW, I'm very excited by web2py - I've wanted > > to ditch PHP for Python for years and I'm hoping this is the framework > > that will allow me to do that! :) > > > Roger. > > > On Apr 4, 12:39 pm, "web2py <<<at>>> technicalbloke.com" > > > <[email protected]> wrote: > > > Or is there a way to create something akin to an old fashioned > > > 'database view' in the model, get SQLFORM to render that and then in > > > the controller validate the fields and insert/update the fields > > > manually? > > > > Roger. > > > > On Apr 4, 12:23 pm, "web2py <<<at>>> technicalbloke.com" > > > > <[email protected]> wrote: > > > > I see that it's non-trivial but maybe 1,3 and 4 could be negated by > > > > using the following syntax (2 I'm not so sure about)... > > > > > COMPOUNDFORM( db.TABLE1,db.TABLE2, db.TABLE3, fields= > > > > [ db.TABLE1.name, db.TABLE2.email, db.TABLE3.phone ], relations > > > > [ db.TABLE1.id==db.TABLE2.contact_id, > > > > db.TABLE1.id==db.TABLE3.contact_id ] ) > > > > > Anyway, if I can't use SQLFORM the issue for me now is how to achieve > > > > this by other means. Is there a way to generate individual form fields > > > > from the model such that the model's constraints are imposed on A) the > > > > submitted values and B) the client side javascript? Or do I have to > > > > duplicate these conditions at the controller level manually? Would it > > > > be a good idea to use form_factory to build such a form? > > > > > Thanks, > > > > > Roger. > > > > > On Apr 4, 11:27 am, mdipierro <[email protected]> wrote: > > > > > > what you say could be implemented but it would not be general enough > > > > > to satisfy every user. > > > > > 1) why be limited to two tables > > > > > 2) is this a one-to-one or one-to-many? > > > > > 3) in which order the fields should be listed > > > > > 4) what if the two tables have fiends with the same name > > > > > ... > > > > > > there are many issue that make this a non-trivial problem. Eventually > > > > > it will be done but requires some work. > > > > > > Massimo > > > > > > On Apr 4, 9:15 am, "[email protected]" > > > > > > <[email protected]> wrote: > > > > > > Hi All, > > > > > > > I must be missing something, I've read the book's chapter on SQLFORM > > > > > > and the bit about "Links to referencing records" but I still can't > > > > > > get > > > > > > my head round how to make a compound form, i.e. one with fields from > > > > > > multiple tables. Here's are my tables... > > > > > > > db.define_table('CONTACTS', > > > > > > SQLField('contact_name','string',length=255, required=True), > > > > > > SQLField('date_added','datetime', required=True) > > > > > > ) > > > > > > db.CONTACTS.contact_name.requires=[ IS_NOT_EMPTY(), IS_LENGTH > > > > > > (255,error_message=T('name too long, max(255)')) ] > > > > > > db.CONTACTS.date_added.requires=[ IS_DATETIME() ] > > > > > > > db.define_table('EMAIL_ADDRESSES', > > > > > > SQLField('contact_id',db.CONTACTS, required=True), > > > > > > SQLField('email_address','string',length=255, required=True), > > > > > > SQLField('the_default','boolean', default=False, required=True) > > > > > > ) > > > > > > db.EMAIL_ADDRESSES.contact_id.requires=[ IS_IN_DB(db, > > > > > > db.CONTACTS.id) ] > > > > > > db.EMAIL_ADDRESSES.email_address.requires=IS_EMAIL() > > > > > > > This is my view... > > > > > > > def index(): > > > > > > cf1 = SQLFORM( db.CONTACTS ) > > > > > > if cf1.accepts(request.vars,session): > > > > > > response.flash="Contact added." > > > > > > return dict( form=cf1 ) > > > > > > > The natural thing seemed to be to try: > > > > > > cf1 = SQLFORM( db.CONTACTS, db.EMAIL_ADDRESSES ) > > > > > > but that barfed, so next I tried... > > > > > > cf1 = SQLFORM( db.CONTACTS, db.EMAIL_ADDRESSES, fields= > > > > > > ["contact_name","email_address"]) > > > > > > which barfs also. I also tried... > > > > > > cf1 = SQLFORM( db.CONTACTS.id==db.EMAIL_ADDRESSES.contact_id, > > > > > > fields="contact_name" ) > > > > > > with the same result. > > > > > > > Am I missing something small or am I going about it entirely the > > > > > > wrong > > > > > > way? > > > > > > > Thanks, > > > > > > > Roger. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "web2py Web Framework" 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/web2py?hl=en -~----------~----~----~----~------~----~------~--~---

