The grid code already calls the .process() method (which calls .accepts()) -- you cannot call .accepts() a second time. If you want a custom form, you need to completely replace the form generated by the grid. But in this case, there should be no need for that -- just use the grid's onvalidation, oncreate, onupdate, onedit, and ondelete callbacks, which will be passed to .process() within the grid code.
Anthony On Tuesday, November 7, 2017 at 7:32:48 AM UTC-5, Yebach wrote: > > Hello > > I am trying to implement a custom form for SQLFORM.grid > > When submit is clicked the data is not inserted. I think the problem is > when I validate form and the form.accepts is not triggered. > > this is my controler > > def workers(): > #some code before but not relevant > > grid_workers = SQLFORM.grid(query=query, > left=db.status.on(db.workers.w_status == db.status.id), > fields=fields, searchable=False, > orderby=[db.workers.w_nick_name], create=True, > deletable=False, editable=True, paginate=100, > buttons_placement='right', > showbuttontext=False, > links=links, > ui=dict(widget='', > header='', > content='', > default='', > cornerall='', > cornertop='', > cornerbottom='', > button='button btn btn-default', > buttontext='buttontext button', > buttonadd='icon plus icon-plus glyphicon > glyphicon-plus', > buttonback='icon leftarrow > icon-arrow-left glyphicon glyphicon-arrow-left', > buttonexport='icon downarrow > icon-download glyphicon glyphicon-download', > buttondelete='icon trash icon-trash > glyphicon glyphicon-trash', > buttonedit='icon pen icon-pencil > glyphicon glyphicon-pencil', > buttontable='icon rightarrow > icon-arrow-right glyphicon glyphicon-arrow-right', > buttonview='icon magnifier icon-zoom-in > glyphicon glyphicon-eye-open', > ), > exportclasses=dict(csv=False, csv_with_hidden_cols=False, > html=False, > tsv_with_hidden_cols=False,json=False, tsv= False, xml = False)) > > > def my_form_processing_new(form): > print "tukej111" > nick_name = form.vars.w_nick_name > workers = db((db.workers.w_organization == org) & (db.workers.w_nick_name > == nick_name) & (db.workers.w_status != 250)).select() > partner_id = form.vars.partner_id > if workers: > form.errors.w_nick_name = T('Worker with this nick name already > exists!') > if not partner_id or partner_id == '': > form.vars.partner_id = -1 > > > def my_form_processing_edit(form): > > #some code not relevant ATM > > if (request.args) and (request.args[0] in ['new']): > print "juhu" > form = grid_workers.create_form > #grid_workers.element('[title=Back]').parent['_href'] = URL('settings', > 'workers') > if form.accepts(request.vars, session, > onvalidation=my_form_processing_new): > print "tukej" > session.flash = T('Worker inserted') > redirect(URL()) > return dict(form = form, inactive_workers=query_inactive) > > if (request.args) and (request.args[0] in ['edit']): > form = grid_workers.update_form > #grid_workers.element('[title=Back]').parent['_href'] = URL('settings', > 'workers') > if form.accepts(request.vars, session, onvalidation = > my_form_processing_edit): > my_form_processing_edit(form) > session.flash = T('Worker updated') > redirect(URL()) > return dict(form = form, inactive_workers=query_inactive) > > > return dict(grid_workers = grid_workers, inactive_workers=query_inactive) > > > and my view > > <div class="col-md-12 " > > > {{if ('new' in request.args) or ('edit' in request.args):}} > {{=form.custom.begin}} > Status: <div>{{=form.custom.widget.w_status}}</div> > First name: <div>{{=form.custom.widget.w_first_name}}</div> > Last name: <div>{{=form.custom.widget.w_last_name}}</div> > Nick name: <div>{{=form.custom.widget.w_nick_name}}</div> > E-mail: <div>{{=form.custom.widget.w_email}}</div> > Work type: <div>{{=form.custom.widget.w_work_type}}</div> > Month hour formula: <div>{{=form.custom.widget.w_hour_formula}}</div> > Work obligation (minutes): > <div>{{=form.custom.widget.w_day_obligation}}</div> > Partner ID : <div>{{=form.custom.widget.partner_id}}</div> > Comment: <div>{{=form.custom.widget.w_note}}</div> > <div>{{=form.custom.submit}}</div> > {{=form.custom.end}} > {{else:}} > {{=grid_workers}} > {{pass}} > </div> > > > > So the if form.accepts(request.vars, session, onvalidation > =my_form_processing_new) does not happen and I believe therefore the data > is not inserted. > > On create new record the print "juhu" happens but there is no further > action > > Any suggestions? > > Thank you > -- 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.