db.define_table( 'sale', Field('user_id', db.auth_user), Field('start_date', 'date', requires=IS_DATE()), Field('end_date', 'date', requires=IS_DATE()), Field('start_time', 'time', requires = IS_TIME()), Field('end_time', 'time', requires = IS_TIME()))
db.sale.user_id.requires = IS_IN_DB(db, 'auth_user.id') db.define_table( 'product', Field('sale_id', db.sale), Field('name', requires = IS_NOT_EMPTY()), Field('price'), Field('description','text'), Field('image', 'upload', default=''), format = '%(name)s %(price)s') db.product.sale_id.requires = IS_IN_DB(db, 'sale.id') Thanks Cliff, This is an improvement on what I had. But I am not sure if I applied the code correctly because the 'user_id' and 'sale_id' have been converted into a drop-down list, as opposed to being automatically populated. On Wednesday, October 16, 2013 4:18:52 PM UTC-5, Cliff Kachinske wrote: > > This is a problem: > > db.define_table( > 'sale', > Field('id', db.auth_user, default=auth.user_id), > > How about this instead: > db.define_table( > 'sale', > Field('user_id', db.auth_user, requires=IS_IN_DB( # See "Forms and > Validators in the Fine Manual > > Also do this: > db.define_table( > 'product', > Field('sale_id', db.sale, requires=IS_IN_DB( # See "Forms and > Validators in the Fine Manual > > Also I would not use the double data type for currency. Use instead Python > decimal which works as you expect decimal numbers to work. Or you could > store the, for example, US currency as pennies and put in the decimal > marker when you display the value and strip it out when you work with it on > the back end. > > Whatever comes in on request.post_vars and ends up in form.vars is a > string. Your database adapter takes care of conversions. > > > > > On Wednesday, October 16, 2013 1:36:53 PM UTC-4, raferbop wrote: >> >> Thanks Stifan, >> >> But that doesn't work either, because the product_id now displays in the >> sale form. I need to generate the sale_id first, and then have sow in the >> product table/form. Right now, it just shows up blank. >> >> On Wednesday, October 16, 2013 11:08:58 AM UTC-5, 黄祥 wrote: >>> >>> yeah, my pov is because your product never save the sale id. imho, i >>> think your code should be : >>> db.define_table( >>> 'sale', >>> Field('product_id', 'reference product'), >>> Field('user_id', db.auth_user, default=auth.user_id), >>> Field('start_date', 'date', requires=IS_DATE()), >>> Field('end_date', 'date', requires=IS_DATE()), >>> Field('start_time', 'time', requires = IS_TIME()), >>> Field('end_time', 'time', requires = IS_TIME())) >>> >>> db.define_table( >>> 'product', >>> Field('name', requires = IS_NOT_EMPTY()), >>> Field('price', 'double', default=0.00), >>> Field('description','text'), >>> Field('image', 'upload', default=''), >>> format = '%(name)s %(price)s') >>> >>> because 1 sale has many product and each product belongs to sale, isn't >>> it? >>> 1 more thing please don't use id as your field name, because by default >>> web2py use it as a primary key. >>> taken from book : >>> >>> - Each table must have a unique auto-increment integer field called >>> "id" >>> - Records must be referenced exclusively using the "id" field. >>> >>> ref: >>> >>> http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer#Legacy-databases-and-keyed-tables >>> >>> best regards, >>> stifan >>> >> -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- 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.