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.

Reply via email to