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

-- 



Reply via email to