In your code.
<td><INPUT type="text", name="grade1", value=
{{=myrecords.gradeterm1}}></td>
<td><INPUT type="text", name="grade2", value=
{{=myrecords.gradeterm2}}></td>
The two inputs are outside any form therefore nobody receives the
input. This is an HTML issue, not a web2py issue. You can try:
def index():
myform=SQLFORM(db.mytest,fields=['studentname'])
if myform.accepts(request.vars,session):
response.flash='record added'
myrecords=db().select(db.mytest.ALL)
myforms=[SQLFORM(db.mytest,r) for r in myrecords,fields=
['gradeterm1','gradeterm2'])
for f in myforms: f.accepts(request.vars,formname=str
(
f.records.id))
return dict(form=myform, forms=myforms)
and
{{extend 'layout.html'}}
<h1>mytest entry form</h1>
{{=form}}
<h2>Current Records</h2>
<table>
<tr>
<td>Student Name</td>
<td>Grade - Term1</td>
<td>Grade - Term2</td>
<td></td>
</tr>
{{for f in forms:}}
<form>
<tr>
<td>{{=A(f.record.studentname)}}</td>
<td><INPUT type="text", name="gradeterm1", value=
{{=f.latest.gradeterm1}} /></td>
<td><INPUT type="text", name="gradeterm2", value=
{{=f.latest.gradeterm2}} /></td><td><input type="submit" /></td>
</tr>
{{=f.hidden_fields()}}
</form>
{{pass}}
</table>