I´m moving my computed fields from db.entities to another table
db.entities_wf_fields and then i use

db.entities_after_update.append(lambda s,f: update_authors(s,f))
db.entities._after_update.append(lambda s,f: update_readers(s,f))
etc...

then
def update_authors(set,ufields):
record = set.select().first()
    ...some code....
     ..some more code...
       ret= calculating new values for field authors...
db.entities_wf_fields.update_or_insert((db.entities_wf_fields.entity ==
record["id"]),entity=record["id"],authors=ret)
return None

It all happens in the server so it should not be too cpu/db expensive.

I may append around 20 more computed fields like these.. every computed
field is a function.
The issue is that it gets very repeating but.. i need to have those 20
computed fields and functions for easy maintenance of each field.
Am in i the wrong direction ?


Regards


2017-07-03 16:08 GMT+01:00 António Ramos <[email protected]>:

> So should i use instead ?
> _after_update.append(lambda s,f: function_2_compute_some_fields(s,f))
> or will i trigger a recursive update and hang the cpu?
>
> regards
>
> 2017-06-30 19:35 GMT+01:00 Anthony <[email protected]>:
>
>> On Friday, June 30, 2017 at 11:45:37 AM UTC-4, Ramos wrote:
>>>
>>> Another problem or symptom is that the computed function need the record
>>> update call to pass all the fields the computed function needs to access
>>> otherwise does not  execute.
>>>
>>> for example
>>>
>>> my record with id =1
>>> {"event":"1","created_by":4,"status":21}
>>>
>>> this line
>>> db(db.entities.id==1).update(event="2",status=21)
>>> is different from this line
>>> db(db.entities.id==1).update(event="2",status=21*,created_by=2*2)
>>> because passing created_by it allows the computed field to use it if it
>>> needs it.It does not receive the full record fields.
>>>
>>> Is this  correct or am i missing something?
>>>
>>
>> Yes, that's how it works. The .update() method sends an update query to
>> the database -- it does not first select the records from the database
>> (which would be inefficient), so it has no access to the current records.
>> If you need the current values of some of the fields for the computed field
>> to be calculated, then you must first select the records yourself.
>>
>> 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 [email protected].
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to