Thanks to all for your input and suggestions. I've tried to make the
changes without effecting the functionality or the goal of using the
'crud' controllers.
Massimo - I'll repost the application with the changes below.
Alvaro - I've considered abandoning the use of the crud controllers
and use 'form', but I've gone this far and it has become a challenge,
plus I hope to add to the knowledge base about the use of the crud
code.
dlypka - I've taken your suggestion and (essentially) copied the code
from the {{=form}} to be as sure as I could to duplicate the layout
John - I've incorporated the form.custom.inpval. When I looked at
what was generated by {{=form}} it didn't seem to need the form
action. I may be missing something, but everything works except the
response.error display, so I'm a little confused. Massimo has asked
to see the updated version of the code, so I'll let him take a look
before I add too much more.
Here is the MVC. The view contains both custom code and {{=form}}.
It doesn't make any difference which input fields or submit button is
used, the data is handled properly. The problem is, if you leave
'testfield1' blank, only the {{=form}} version displays the 'cannot be
empty' message. The error is not displayed in the custom form. The
code for the labels and fields are copied directly from the {{=form}}
source of the page and modified to display the
form.custom.inpval.fieldname variables.
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
auth=Auth(globals(),db) # authentication/
authorization
auth.define_tables() # creates all needed
tables
crud=Crud(globals(),db) # for CRUD helpers using
auth
crud.settings.update_next = URL(r=request, f='index')
Controller
------------
def index():
session.action = ""
redirect(URL(r=request,f='testdata'))
@auth.requires_login()
def testdata():
setsubmit()
if request.args: id = request.args[0]
else: id = 3 # Included for testing
if session.action == "create":
return dict(form=crud.create(db.testtable))
elif session.action == "update":
return dict(form=crud.update(db.testtable,id))
else:
return dict(form=crud.read(db.testtable,id))
def setsubmit():
if request.vars.submit1: session.action = "create"
if request.vars.submit2: session.action = "update"
if request.vars.submit3: session.action = ""
def data():
response.view="%s/%s/%s.html" %
(request.controller,request.function, request.args[0])
return dict(form=crud())
def user():
return dict(form=auth())
Views
------
( The following is default/testdata.html )
{{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 in ["update","create"]:}}
<td><input class="string" id="testtable_testfield1"
name="testfield1" type="text"
value="{{=form.custom.inpval.testfield1}}" /></td>
{{else:}}
<td>{{=form.custom.inpval.testfield1}}</td>
{{pass}}
<td></td>
</tr>
<tr>
<td><label >Testfield2:</label></td>
{{if session.action in ["update","create"]:}}
<td><input class="string" id="testtable_testfield2"
name="testfield2" type="text"
value="{{=form.custom.inpval.testfield2}}" /></td>
{{else:}}
<td>{{=form.custom.inpval.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'}}
( The following is buttons.html)
<br />
{{if session.action in ["update","create"]:}}
<input type="submit" name="submit" value="Submit" />
<input type="submit" name="submit3" value="Cancel" />
{{else:}}
<input type="submit" name="submit1"
value=" Add " />
<input type="submit" name="submit2" value="Update" />
<input type="submit" name="submit3" value="Cancel" />
{{pass}}
{{=form.hidden_fields()}}
++++++++++++++ End of MVC ++++++++++++++++++++
Thanks again to all.
Regards,
Gary