Tested with MSSQL 2008 and DB2 If you connect existing table with primarykey and use writable=False to any of the field on the form, it will show the following error.
Traceback (most recent call last): File "C:\web2py\gluon\restricted.py", line 194, in restricted exec ccode in environment File "C:/web2py/applications/otwitter/controllers/default.py", line 91, in <module> File "C:\web2py\gluon\globals.py", line 149, in <lambda> self._caller = lambda f: f() File "C:/web2py/applications/otwitter/controllers/default.py", line 33, in test if form.process().accepted: File "C:\web2py\gluon\html.py", line 1950, in process self.validate(**kwargs) File "C:\web2py\gluon\html.py", line 1898, in validate if self.accepts(**kwargs): File "C:\web2py\gluon\sqlhtml.py", line 1238, in accepts fields[field.name] = self.record[field.name] TypeError: 'NoneType' object is not subscriptable This is really critical for my project because I cannot use writable=False to the fields I want to protect. Table definition -------------------------------- db.define_table('test', Field('mykey'), Field('field1'), Field('field2'), primarykey=['mykey'], migrate=False) controller --------------------------------- def test(): db.test.field2.writable=False form = SQLFORM(db.test) if form.process().accepted: response.flash = 'form accepted' elif form.errors: response.flash = 'form has errors' return dict(form=form) view ---------------------------------- {{extend 'layout.html'}} <h1>test</h1> {{=form}}