I am trying your formula but my Delta field is not getting updated. It is supposed to change as i enter a different value in ODO_Reading.
On Monday, January 14, 2019 at 6:26:09 AM UTC+2, Anthony wrote: > > On Sunday, January 13, 2019 at 10:24:03 AM UTC-5, mostwanted wrote: >> >> How can achieve decremental subtraction of a value in a database field? >> >> *MODEL CODE* >> >> db.define_table('fuelLogging', >> Field('Quantity', 'integer', requires=IS_NOT_EMPTY()), >> Field('Rate', 'integer', requires=IS_NOT_EMPTY()), >> Field('Total', compute=lambda r:r['Quantity']*r['Rate']), >> Field('ODO_Reading', 'integer', requires=IS_NOT_EMPTY()), >> * Field('Delta', compute=lambda >> r:r['ODO_Reading']-r['ODO_Reading'], requires=IS_NOT_EMPTY()),* >> Field('Fuel_Usage', compute=lambda r: r['Delta']/r[ >> 'Quantity'])) >> To get the delta field i have to subtract the previously entered >> ODO_Reading value from the newly entered ODO_Reading value but what i have >> done here is not working, any suggestions? >> > > To use an existing field value in a query, you can use the field object > itself (i.e., db.fuelLogging.ODO_Reading). However, for the DAL to treat > the expression as an Expression object, the field object must come first, > so you cannot do r.ODO_Reading - db.fuelLogging.ODO_Reading. You must > instead use (db.fuelLogging.ODO_Reading * -1) + r.ODO_Reading. > > Another problem you will have is that the compute function will not work > on inserts because there is no value in the ODO_Reading field in that > case. A workaround is to set the compute attribute conditionally only on > updates: > > def fuelLogging_before_update(*args, **kwargs): > db.fuelLogging.compute = lambda r: (db.fuelLogging.ODO_Reading * -1) + > r.ODO_Reading > > db.define_table('fuelLogging', > Field('ODO_Reading', 'integer'), > Field('Delta', 'integer', default=0), > before_update=fuelLogging_before_update) > > Anthony > -- 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/d/optout.