You can try something like
def delete_linked(query, table=table):
ids = [t.id in db(query).select(db.table.id)]
for field in table._referenced_by:
db(field._table._id.belongs(ids)).delete()
db.table._before_delete.append(delete_linked)
but you will run into consistency problems. If there are too many records
this may fail midway.
On Wednesday, 14 November 2012 19:07:02 UTC-6, Julian Sanchez wrote:
>
> Hi Everyone!! Long time lurker & first time posting...
>
> I am working on a simple application that I intend to deploy in GAE. I
> have a few tables with fields that reference other tables which by default
> enables the ondelete=CASCADE behavior. This works fine when I run the app
> locally using sqlite as the database.
> I believe GAE doesn't support cascading deletes natively.
> I presume web2py doesn't support cascading deletes when running under GAE
> because I don't see that happening. When I delete a row (rendered through
> SQLFORM.grid) only that row is deleted an all dependent tables remain
> untouched.
>
> The problem I have is that I can't find a way for me to implement the
> cascading behavior manually. I added a 'ondelete=mydelete' event for the
> SQLFORM.grid where I do the manual delete of the dependent tables and
> commit in the database, but that doesn't seem to work either. I searched
> through this forum but didn't find any suggestions either. Any suggestions
> as to what could I do to solve this?? Do I have to stay away from
> SQLFORM.grid to avoid this problem?
>
> Many Thanks!!
> Julian
>
> I am using web2py Version 2.2.1 (2012-10-21 16:57:04) stable on OS X
> Mountain Lion and GoogleAppEngineLauncher version 1.7.3 (1.7.3.333)
>
--