Can you try again with mysql, delete the database and replace: auth.define_tables(signature=True) with auth.define_tables(signature=False)
Does the problem does away? It looks like it does not like the self reference in auth_user. On Saturday, 7 April 2012 22:09:31 UTC-5, tomt wrote: > > Hi, > > I tried using your new versioning feature in trunk. > I created an app using a mysql database: > db = DAL('mysql://version:version@localhost/version') > When I used the admin function to define a new user > I received the following error: > ........................................ > <class 'gluon.contrib.pymysql.err.IntegrityError'> > (1452, u'Cannot add or update a child row: a foreign key constraint fails > (`version/auth_user`, CONSTRAINT `auth_user_ibfk_1` > FOREIGN KEY (`created_by`) REFERENCES `auth_user` (`id`) ON DELETE > CASCADE)') > ........................................ > > I rebuilt the app to use sqlite instead of mysql: > db = DAL('sqlite://storage.sqlite') > > I was then able to add a user without the error > > I was using MySQL client version: 5.0.84 > > - any suggestions? - Tom > > On Thursday, April 5, 2012 4:16:04 PM UTC-6, Massimo Di Pierro wrote: >> >> This is how it works: >> >> # define auth >> auth = Auth(db, hmac_key=Auth.get_or_create_key()) >> auth.define_tables(username=True,signature=True) >> >> # define your own tables like >> db.define_table('mything',Field('name'),auth.signature) >> >> # than do: >> auth.enable_record_versioning(db) >> >> how does it work? every table, including auth_user will have an >> auth.signature including created_by, created_on, modified_by, modified_on, >> is_active fields. When a record of table mything (or any other table) is >> modified, a copy of the previous record is copied into mything_archive >> which references the current record. When a record is deleted, it is not >> actually deleted but is_active is set to False, all records with >> is_active==False are filtered out in searches except in appadmin. >> >> Pros: >> - your app will get full record archival for auditing purposes >> - could not be simpler. nothing else to do. Try with >> SQLFORM.grid(db.mything) for example. >> - does not break references and there is no need for uuids >> - does not slow down searches because archive is done in separate archive >> tables >> >> Cons: >> - uses lots of extra memory because every version of a record is stored >> (it would be more efficient to store changes only but that would make more >> difficult to do auditing). >> - slows down db(...).update(...) for multi record because it needs to >> copy all records needing update from the original table to the archive >> table. This requires selecting all the records. >> >> Comments? Suggestions? >> >> >> >> >> >> >>