Need to see the code that generated the KeyError, as well as the full traceback, and details about how/when the error was generated.
On Saturday, March 30, 2019 at 3:31:41 PM UTC-4, João Matos wrote: > > This is my code > form = SQLFORM.factory( > Field('equipment_id', > label=T('Equipment'), > requires=IS_IN_SET({wo.equipment_id: db.equipment(wo. > equipment_id).name}, > zero=None), > ), > Field('sn', > label=T('SN'), > widget=lambda field, value: ( > SQLFORM.widgets.string.widget(field, value, _readonly=True > )), > ), > Field('code', > label=T('WO'), > requires=IS_EMPTY_OR(IS_IN_DB(db(query), 'wo.code', distinct > =True)), > ), > Field('client_id', > label=T('Client'), > requires=IS_IN_DB(db, 'client.id', '%(name)s', zero=T('Choose > one...')), > ), > Field('manual_lang_id', > label=T('Manual language'), > requires=IS_IN_DB(db, > 'manual_lang.id', > '%(name)s', > zero=T('Choose one...'), > ), > ), > Field('co_code', default='', label=T('Customer order')), > Field('so_code', default='', label=T('Supplier order')), > Field('export', 'boolean', default=False, label=T('Export')), > Field('notes', default='', label=T('Notes')), > Field('observations', default='', label=T('Observations')), > Field('est_finish', > 'date', > label=T('Estimated finish'), > notnull=True, > required=True, > requires=IS_DATE_IN_RANGE( # format=T('%Y-%m-%d'), > minimum=request.now.date() + > timedelta(days=1), > # maximum=request.now.date() + , > error_message=T('Must be a future > date.') > ) > ), > *factory_fields, > ) > > > sábado, 30 de Março de 2019 às 19:03:40 UTC, Anthony escreveu: >> >> Hard to say without seeing your code, but it definitely works for me. >> >> On Saturday, March 30, 2019 at 2:37:27 PM UTC-4, João Matos wrote: >>> >>> How can I use the fields argument without a db? >>> I tried >>> fields=['sn'] >>> but it returns an KeyError. >>> >>> >>> sábado, 30 de Março de 2019 às 18:27:11 UTC, Anthony escreveu: >>>> >>>> I don't see any advantage in using the fields parameter because the >>>>> change I found >>>>> form.element('#no_table_sn')['_readonly'] = 'readonly' >>>>> and the suggestion you made >>>>> widget=lambda f, v: SQLFORM.widgets.string.widget(f, v, _readonly=True >>>>> ) >>>>> only change 1 line, and using the fields would make me change all the >>>>> Fields lines (if I'm not mistaken). >>>>> >>>> >>>> No, "fields" is an argument of SQLFORM: >>>> >>>> form = SQLFORM.factory(..., fields=['field1', 'field2', ...]) >>>> >>>> Anyway, setting the _readonly attribute of the input widget and setting >>>> writable=False in the Field() definition do two different things. The >>>> former makes the input element read-only in the UI but is less secure >>>> because it does not prevent writes on the server. The latter does not use >>>> an input element to display the data in the UI, and it also prevents >>>> writes >>>> on the server. >>>> >>>> Anthony >>>> >>> -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.