Hi Gary You have got an interesting approach. However I think it is more complicated than necessary for what you want to achieve.
Since your goal appears to be to customise crud layouts then why not just stick to that instead of also bypassing crud in the testdata controller action? You cannot get the error message you want because your testdata action does not do anyting that will initiate a validator action (such as the normal 'if form.accepts (request.vars,session):'. To get normal crud validation action make sure your form uses your data controller action. Also in your custom form you are using a method to extract the read or update values from a SQLFORM generated form in an undocumented way (form.record.field_name). If it worked once with web2py it does not work now. The documented way can be found in http://www.web2py.com/AlterEgo/default/show/205 such as form.custom.inpval.field_name. To use crud in a simple manner you will need to include <input value="{{=form.formkey}}" type="hidden" name="_formkey" /> <input value="{{=form.formname}}" type="hidden" name="_formname" /> as well as mame the form action="data" as in <form action="data" enctype="multipart/form-data" method="post"> Also you will need to make sure all the required templates exist or in the controller data add some tests around response.view="%s/%s/%s.html" % (request.controller,request.function, request.args[0]) to only use the templates you want Regards John Heenan On May 3, 3:37 am, Gary <[email protected]> wrote: > The following MVC is used to create/update/read a single table. The > validation for not empty works with the {{=form}} but not the custom > HTML. Both versions are displayed in the same form and the data is > changed and validated via either submit button, but the error message > is only displayed in the top, standard form. > > Can anyone see what is causing the different behavior? > > Thanks > > Model > ------- > try: > from gluon.contrib.gql import * # if running on Google App Engine > except: > db = SQLDB('sqlite://storage.db') # if not, use SQLite or other > DB > else: > db = GQLDB() # connect to Google BigTable > session.connect(request, response, db=db) # and store sessions > there > ## > db.define_table('testtable',SQLField('testfield1','string'),SQLField > ('testfield2','string')) > db.testtable.testfield1.requires=IS_NOT_EMPTY() > > from gluon.tools import Mail, Auth, Crud # new in web2py 1.56 > crud=Crud(globals(),db) # for CRUD helpers using > auth > crud.settings.update_next = URL(r=request, f='index') > > Controller > ------------ > def index(): > session.action = "update" > redirect(URL(r=request,f='testdata',args=["3"])) > > def testdata(): > if request.vars.submit1: session.action = "create" > if request.vars.submit2: session.action = "update" > if request.vars.submit3: session.action = "" > if session.action == "create": > return dict(form=crud.create(db.testtable)) > elif session.action == "update": > id=request.args[0] > return dict(form=crud.update(db.testtable,id)) > else: > id=request.args[0] > return dict(form=crud.read(db.testtable,id)) > > def data(): > response.view="%s/%s/%s.html" % > (request.controller,request.function, request.args[0]) > return dict(form=crud()) > > View (default/testdata) > ----------------------------- > {{extend 'layout.html'}} > <h1>Testdata > {{if session.action == "update":}} > Update > {{elif session.action == "create":}} > Add > {{pass}} > </h1> > {{=form}} > ========================================= > <form action="" enctype="multipart/form-data" method="post"> > <table> > <tr id="testtable_testfield1__row"> > <td><label for="testtable_testfield1" > id="testtable_testfield1__label">Testfield1: </label></td> > {{if session.action == "update":}} > <td><input class="string" id="testtable_testfield1" > name="testfield1" type="text" value="{{=form.record.testfield1}}" /></ > td> > {{elif session.action == "create":}} > <td><input class="string" id="testtable_testfield1" > name="testfield1" type="text" value="" /></td> > {{else:}} > <td>{{=form.record.testfield1}}</td> > {{pass}} > <td></td> > </tr> > <tr> > <td><label >Testfield2:</label></td> > {{if session.action == "update":}} > <td><input class="string" name="testfield2" type="text" > value="{{=form.record.testfield2}}" /></td> > {{elif session.action == "create":}} > <td><input class="string" id="testtable_testfield1" > name="testfield2" type="text" value="" /></td> > {{else:}} > <td>{{=form.record.testfield2}}</td> > {{pass}} > <td></td> > </tr> > {{if session.action == "update":}} > <tr id="delete_record__row"> > <td><label for="delete_record" id="delete_record__label">Check to > delete:</label></td> > <td><input class="delete" id="delete_record" > name="delete_this_record" type="checkbox" value="on" /></td> > <td></td> > </tr> > {{pass}} > </table> > {{include 'buttons.html'}} > </form> --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "web2py Web Framework" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/web2py?hl=en -~----------~----~----~----~------~----~------~--~---

