If you use archive you should not never delete records. You should only have an "active" field and filter out the inavtice ones.
On Mar 8, 11:33 pm, Rowdy <da...@fielden.com.au> wrote: > Greetings, > > I have been playing a little with crud.archive, as advertised by Massimo > in a post on 13-Feb-2010. It's fantastic :-) > > ... except when deleting data. > > When I try to delete, I get this: > > Traceback (most recent call last): > File "/home/rowdy/web2py/gluon/restricted.py", line 173, in restricted > exec ccode in environment > File > "/home/rowdy/web2py/applications/webacc2/controllers/table_codes.py", > line 652, in <module> > File "/home/rowdy/web2py/gluon/globals.py", line 96, in <lambda> > self._caller = lambda f: f() > File "/home/rowdy/web2py/gluon/tools.py", line 1892, in f > return action(*a, **b) > File > "/home/rowdy/web2py/applications/webacc2/controllers/table_codes.py", > line 364, in project_update > form = crud.update(db.project, row, onaccept = crud.archive) > File "/home/rowdy/web2py/gluon/tools.py", line 2391, in update > onaccept(form) > File "/home/rowdy/web2py/gluon/tools.py", line 2295, in archive > id = archive_table.insert(**new_record) > File "/home/rowdy/web2py/gluon/sql.py", line 1879, in insert > self._db._execute(query) > File "/home/rowdy/web2py/gluon/sql.py", line 958, in <lambda> > self._execute = lambda *a, **b: self._cursor.execute(*a, **b) > IntegrityError: insert or update on table "project_archive" violates > foreign key constraint "project_archive_current_record_fkey" > DETAIL: Key (current_record)=(31372) is not present in table "project". > > Actually I would expect this. When Crud.archive() inserts data into the > archive table, it populates the 'current_record' column with the id of > the row that has just been deleted from the main table. Thus the > foreign key constraint fails, with the above error. > > I am not sure if the following is the most web2pythoninc way of fixing > it, but I implemented the following work-around in Crud.archive() just > after the test for "if not old_record": > > if form.request_vars.delete_this_record == 'on': > return None > > Rowdy -- You received this message because you are subscribed to the Google Groups "web2py-users" group. To post to this group, send email to web...@googlegroups.com. To unsubscribe from this group, send email to web2py+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/web2py?hl=en.