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
-~----------~----~----~----~------~----~------~--~---

Reply via email to