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
>>>>>>
>>>>>>
>>>>>>
--