I think you can take two approaches. One option would be to conditionally
set the update attribute depending on the request:
Field('modified_on', 'datetime',
update=request.now if request.function != 'admin_routine' else
None, ...)
The other approach is to pass in the current value when doing the update in
the admin routine:
def admin_routine:
...
idb.student(source.id).address.update(student=target.id, modified_on
=idb.student.address)
Anthony
On Tuesday, January 27, 2015 at 9:48:54 AM UTC-5, [email protected]
wrote:
>
> I'm really liking the ability to automatically timestamp when records are
> updated, but I'm wondering if there's a simple way of suppressing this
> behaviour when needed:
>
> I have these signature fields appended to a number of tables,
> automatically recording when users update records:
> signature_fields = idb.Table(
> idb, 'signature_fields', #Dummy table, not actually in the db
> Field('created_on', 'datetime',
> default=request.now,
> writable=False, readable=False,
> label='Created on'),
> Field('created_by', 'string',
> default=auth.user.username
> writable=False, readable=False,
> label='Created by'),
> Field('modified_on', 'datetime',
> update=request.now, default=request.now,
> writable=False, readable=False,
> label='Modified on'),
> Field('modified_by', 'string',
> default=auth.user.username, update=signature_username,
> writable=False, readable=False,
> label='Modified by'),
> )
>
> For example:
>
> idb.define_table(
> 'address',
> Field('id', 'id', readable=False),
> Field('student', idb.student, readable=False, writable=False),
> Field('line1', 'string'),
> Field('line2', 'string'),
> Field('line3', 'string'),
> Field('town', 'string'),
> Field('countystate', 'string'),
> Field('country', 'string'),
> Field('postcode', 'string'),
> signature_fields
> )
>
> But I have an admin routine that allows me to move addreses to another
> student, and I don't want the timestamping to occur when I run:
> idb.student(source.id).address.update(student=target.id)
>
> Is there a simple way to suppress automatic update values? e.g.:
> idb.student(source.id).address.update(student=target.id, _defaults=False)
>
>
> I know I can disable them one by one before running the queries, but it'll
> add lots of boilerplate a la:
> idb.address.modified_on.update = idb.address.modified_by.update = None
>
>
>
>
--
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.