>
> I'm actually taking 2 values from the request as the query (q = mytable.x 
> == request.vars.X and mytable.y == request.vars.Y)
> [X is  actually not from the vars, but from the env's].  
> update_or_insert() takes care of making these more or less unique.  The 
> downside of that is only knowing the id if the insert takes place, so I can 
> tell if it was an update but not where.  Doing a second query is possible, 
> I admit.
>

If you need to do an update-or-insert but need the ID in case of update, 
then do not use .update_or_insert -- just write your own logic, as it is 
quite simple.
 

> a _before_update hook  gives me the id, but how do I add the num_updates 
> field?  lambda s, f: f.append(dict('num_updates', 2)) doesn't work (gives 
> an AttributeError).  The ticket says f is really an OpRow, and anyway I 
> don't want to stick a dict *into* it.  Python dict's have an update 
> method to, um, concatenate a dict to a dict; does OpRow have something 
> like that?  And how can I get the present value?
>

The second argument passed to _before_update is a Row-like object of the 
fieldnames/values of the update -- so just do this:

def mytable_before_update(s, f):
  # f['num_updates'] also works.
  f.num_updates = db.mytable.num_updates + 1

With a lambda, you can do:

lambda s, f: f.set_value('num_updates', db.mytable.num_updates + 1)

Though the .set_value method is not part of the public API, so may not 
remain backward compatible.

Note, you do not need the current value of num_updates -- if you use an 
expression like above, the database will do the addition for you. To see 
what the generated query looks like, try printing db(db.mytable.id == 
some_id)._update(num_updates=db.mytable.num_updates + 1).

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.

Reply via email to