Yes I understand that :)
And it asks also for triggerValue if not given, but it's a bit
annoying.

Isn't it possible for it to get those existing values directly ?

Thanks.

On Feb 3, 7:38 pm, Massimo Di Pierro <[email protected]>
wrote:
> The problem is that unicity must be computed but it needs triggename.
> You are not passing triggername when you do the update_rector and
> web2y does not do what to do. web2py wants you to be explicit:
>
> row=db.alarms(2)
> row.update_record(message='rz',triggerName=row.triggerName)
>
> On Feb 3, 4:40 am, "Joseph.Piron" <[email protected]> wrote:
>
>
>
> > Hi guys, I'm currently facing a strange thing :)
>
> > I make use of datatables (jquery datatables.net) and jeditable to
> > update values in my db. If the user clicks on a value, he changes it
> > and sends it, thus, only the value of this field.
>
> > On the server part, i then do a
> > db.alarms[request.vars.id].update_record(field=value).
>
> > Unfortunately, i have to have a unicity condition for this table, and
> > thus, with the previous statement, i get an error.
>
> > Here's some code to help understand..
>
> > db.define_table('alarms',
> >     Field('triggerName', type = 'string', label = T('Trigger Name'),
> > required = True, notnull = True),
> >     Field('triggerValue', type = 'integer', label = T('Trigger
> > Value'), required = True, notnull = True),
> >     Field('message', type = 'string', label = T('Message'), required =
> > True, notnull = True),
> >     Field('alarmScope', type = 'string', label = T('Alarm Scope'),
> > required = True, notnull = True),
> >     Field('unicity', type = 'string', compute = lambda x:
> > x.triggerName + str(x.triggerValue), unique = True),
> >     format = '%(triggerName)s - %(triggerValue)s',
> >     migrate = settings.migrate)
>
> > db.alarms.triggerValue.requires =
> > IS_NOT_IN_DB(db(db.alarms.triggerName == request.vars.triggerName),
> > 'alarms.triggerValue')
>
> > If i want to update one of the fields, I have absolutely to also
> > update (even if the don't change) triggerName and triggerValue (fields
> > for unicity condition), and thus I need some test dependent on which
> > field is updated..
>
> > Here's an exemple:
>
> > In [15]: db.alarms[2].update_record(message='rz')
> > ---------------------------------------------------------------------------
> > KeyError                                  Traceback (most recent call
> > last)
>
> > /Users/joseph/Documents/workspace/web2py/<ipython console> in
> > <module>()
>
> > /Users/joseph/Documents/workspace/web2py/gluon/dal.pyc in <lambda>(_,
> > **a)
> >    1245                 if field_type == 'id':
> >    1246                     id = colset[field.name]
> > -> 1247                     colset.update_record = lambda _ = (colset,
> > table, id), **a: update_record(_, a)
> >    1248                     colset.delete_record = lambda t = table, i
> > = id: t._db(t._id==i).delete()
> >    1249                     for (referee_table, referee_name) in \
>
> > /Users/joseph/Documents/workspace/web2py/gluon/dal.pyc in
> > update_record(pack, a)
> >    4433     c = dict([(k,v) for (k,v) in b.items() \
> >    4434                   if k in table.fields and not k=='id'])
> > -> 4435     table._db(table._id==id).update(**c)
> >    4436     for (k, v) in c.items():
> >    4437         colset[k] = v
>
> > /Users/joseph/Documents/workspace/web2py/gluon/dal.pyc in update(self,
> > **update_fields)
> >    4392     def update(self, **update_fields):
> >    4393         tablename = self.db._adapter.get_table(self.query)
> > -> 4394         fields =
> > self.db[tablename]._listify(update_fields,update=True)
> >    4395         self.delete_uploaded_files(update_fields)
> >    4396         return
> > self.db._adapter.update(tablename,self.query,fields)
>
> > /Users/joseph/Documents/workspace/web2py/gluon/dal.pyc in
> > _listify(self, fields, update)
> >    3748                 new_fields.append((ofield,ofield.update))
> >    3749             elif ofield.compute:
> > -> 3750
> > new_fields.append((ofield,ofield.compute(Row(fields))))
> >    3751             elif not update and ofield.required:
> >    3752                 raise SyntaxError,'Table: missing required
> > field: %s' % name
>
> > /Users/joseph/Documents/workspace/web2py/applications/hmiwebsite/
> > models/model_alarms.py in <lambda>(x)
> >       7     Field('message', type = 'string', label = T('Message'),
> > required = True, notnull = True),
> >       8     Field('alarmScope', type = 'string', label = T('Alarm
> > Scope'), required = True, notnull = True),
> > ----> 9     Field('unicity', type = 'string', compute = lambda x:
> > x.triggerName + str(x.triggerValue), unique = True),
> >      10     format = '%(triggerName)s - %(triggerValue)s',
> >      11     migrate = settings.migrate)
>
> > /Users/joseph/Documents/workspace/web2py/gluon/dal.pyc in
> > __getattr__(self, key)
> >    3061
> >    3062     def __getattr__(self, key):
> > -> 3063         return dict.__getitem__(self,key)
> >    3064
> >    3065     def __setattr__(self, key, value):
>
> > KeyError: 'triggerName'
>
> > Could anyone help me out of this one ? :)

Reply via email to