Hi, yes still open. Attached what you requested, hopefully.
Kenneth def data(): new = 0 serials = db(db.asset_serial.asset_id == request.args(2)).select() crud.settings.create_onaccept = insert_serial crud.settings.create_next = URL('index',vars=session.http_get_vars,args=session.http_args) crud.settings.update_onaccept = update_assets crud.settings.update_next = URL('index',vars=session.http_get_vars,args=session.http_args) crud.settings.delete_next = URL('index',vars=session.http_get_vars,args=session.http_args) crud.settings.delete_onvalidation = delete_serials # return db._lastsql db.assets.asset_label.requires = IS_NOT_IN_DB(db, 'assets.asset_label') db.assets.asset_start_date.requires = IS_NOT_EMPTY() db.assets.asset_name.requires = IS_EMPTY_OR(IS_IN_DB(db, 'assets.asset_name', groupby=db.assets.asset_name)) db.assets.asset_parent.requires = IS_EMPTY_OR(IS_IN_DB(db((db.assets.asset_id.belongs([r.asset_parent for r in db(db.assets.asset_parent != None).select(db.assets.asset_parent, groupby=db.assets.asset_parent)])) or (db.assets.asset_ form = crud() form[0][0][1].append(INPUT(_type='text', _id="assets_asset_name_2", _name='asset_name_2', _width=3)) form[0][5][1].append(INPUT(_type='text', _id="assets_asset_parent_2", _name='asset_parent_2', _width=3)) if request.args(0) == 'create': types = db(db.asset_serial).select(db.asset_serial.asset_serial_type, groupby=db.asset_serial.asset_serial_type) form[0][8].insert(0,TR(TD(LABEL('Serial number type:')), TD(SELECT(*[type.asset_serial_type for type in db(db.asset_serial).select(groupby=db.asset_serial.asset_serial_type)], _name='serial_number_type'), INPUT(_type='text',_nam form[0][8].insert(0,TR(TD(LABEL('Serial number:')), TD(INPUT(_type='text',_name='serial_number')))) new = 1 return dict(form=form, serials=serials, new = new) def update_assets(form): if form.request_vars.asset_name_2 != '': row = db(db.assets.asset_id == form.vars.id).update(asset_name = form.request_vars.asset_name_2) if form.request_vars.asset_parent_2 != '': row = db(db.assets.asset_id == form.vars.id).select().first() if len(db(db.assets.asset_id == form.request_vars.asset_parent_2).select()): row.update_record(asset_parent = form.request_vars.asset_parent_2) db.define_table('assets', Field('asset_id', type='id'), Field('asset_name', type='string'), Field('asset_description', type='string'), Field('asset_label', type='string'), Field('asset_type_id', 'reference ref_asset_type'), Field('asset_category_id', 'reference ref_asset_category'), Field('asset_parent', 'integer'), Field('asset_start_date', type='datetime'), Field('asset_end_date', type='datetime'), Field('update_time', type='datetime',writable=False,readable=False), Field('update_user', type='string',writable=False,readable=False, update=auth.user_id), format='%(asset_label)s',) Den torsdagen den 13:e december 2012 kl. 05:02:33 UTC+2 skrev Massimo Di Pierro: > > Is this still an open issue? If so can you post your model and the > complete action? > > On Sunday, 9 December 2012 17:02:13 UTC-6, Kenneth wrote: >> >> Hi, >> >> I "converted" the problematic row ( row = db(db.assets.asset_id == >> form.vars.id).update(asset_name = form.request_vars.asset_name_2) ) into >> normal SQL and used it on the database directly, works fine. >> >> I made a static version of the same row ( row = db(db.assets.asset_id == >> 273).update(asset_name = 'testing3') ) and put it into an own function and >> works fine. But if I put the static row into my onaccept ( >> crud.settings.update_onaccept = update_assets) function I get the same >> error. >> >> I just wildly guessing but could be somekind of locking issue? >> >> >> Kenneth >> >> Den fredagen den 7:e december 2012 kl. 18:50:17 UTC+2 skrev Massimo Di >> Pierro: >>> >>> The error you are getting is a database error, not a web2py error, it >>> says you are trying to insert a record with a duplicate id. Perhaps the >>> data is already corrupted in db. >>> >>> On Friday, 7 December 2012 00:06:43 UTC-6, Kenneth wrote: >>>> >>>> Hi, >>>> >>>> this is a legacy table and asset_id is the id for the table. So it >>>> needs to be unique. The migration is false, web2py is not able to change >>>> the structure at all. >>>> >>>> I'm only trying to update the asset_name not create an new that looks >>>> the same. >>>> >>>> >>>> Kenneth >>>> >>>> >>>> Den fredagen den 7:e december 2012 kl. 04:10:24 UTC+2 skrev Massimo Di >>>> Pierro: >>>>> >>>>> I suspect your asset_id is declared as unique (or was declared as >>>>> unique, then you made a migration but db still thinks it is unique). >>>>> >>>>> On Thursday, 6 December 2012 17:37:10 UTC-6, Kenneth wrote: >>>>>> >>>>>> Hello, >>>>>> >>>>>> I have a form created by CRUD with some extra fields. assets_label >>>>>> field is a dropdown consisting of all old labels. Beside that I add an >>>>>> normal text field where user can enter a new label. >>>>>> I have then crud.settings.create_onaccept = insert_assets where I >>>>>> update the label name if there is some text in the textfield. This works >>>>>> great. >>>>>> >>>>>> The problem comes with crud.settings.update_onaccept = update_assets >>>>>> and >>>>>> def update_assets(form): >>>>>> if form.request_vars.asset_name_2 != '': >>>>>> row = db(db.assets.asset_id == form.vars.id).update(asset_name >>>>>> = form.request_vars.asset_name_2) >>>>>> >>>>>> I get an error ticket containg: >>>>>> <class '_mysql_exceptions.IntegrityError'> (1062, "Duplicate entry >>>>>> '275-2012-12-07 10:26:41' for key 'asset_id'") >>>>>> >>>>>> >>>>>> File "/usr/lib/pymodules/python2.6/MySQLdb/cursors.py", line 166, in >>>>>> execute >>>>>> self.errorhandler(self, exc, value) >>>>>> File "/usr/lib/pymodules/python2.6/MySQLdb/connections.py", line 35, >>>>>> in defaulterrorhandler >>>>>> raise errorclass, errorvalue >>>>>> IntegrityError: (1062, "Duplicate entry '275-2012-12-07 10:26:41' for >>>>>> key 'asset_id'") >>>>>> >>>>>> >>>>>> Any ideas what I'm doing wrong? >>>>>> >>>>>> >>>>>> Kenneth >>>>>> >>>>>> >>>>>> --