I think this is a bug. Can you please open a ticket on google code?
On Apr 19, 5:42 am, Allan Daemon <[email protected]> wrote: > Hi. > > I'm new by here, as also in web2py. I'm from Brazil. > > I created a table with this field: > > Field('userid', db.auth_user, unique=True, required=True, > writable=False, readable=False) > > Just logged users can submit, with 1 record per user, and I need to keep > the user id in each record. > > In the controller I put this in the CRUD creation: > > # coding: utf8# > from gluon.tools import Crud > crud = Crud(globals(), db) > > crud.settings.formstyle = "divs" > crud.messages.submit_button = 'Enviar' > > @auth.requires_login() > def index(): > uid = auth.user_id > current_records = db(db.guys.userid == uid) > if current_records.count(): #user already registry > gid = current_records.select().first().id > f = crud.update(db.guys, gid, audit_guys, > onaccept=crud.archive) #To be fixed > else: # New regisry > db.guys.pg.readable = False > db.guys.nome.default = auth.user.first_name+ ' ' + auth.user.last_name > db.guys.email.default = auth.user.email > #db.guys.userid.default = auth.user_id > db.guys.userid.compute = lambda f: uid > f = crud.create(db.guys) > return dict(msg='',form=f) > > But when I insert a record, it's raises this error: > > Traceback (most recent call last): > File "/var/www/web2py/gluon/restricted.py", line 188, in restricted > exec ccode in environment > File "/var/www/web2py/applications/jornada/controllers/inscricao.py", > line 59, in <module> > File "/var/www/web2py/gluon/globals.py", line 124, in <lambda> > self._caller = lambda f: f() > File "/var/www/web2py/gluon/tools.py", line 2331, in f > return action(*a, **b) > File "/var/www/web2py/applications/jornada/controllers/inscricao.py", > line 31, in index > f = crud.create(db.guys) > File "/var/www/web2py/gluon/tools.py", line 2960, in create > formname=formname, > File "/var/www/web2py/gluon/tools.py", line 2901, in update > detect_record_change = self.settings.detect_record_change): > File "/var/www/web2py/gluon/sqlhtml.py", line 1201, in accepts > self.vars.id = self.table.insert(**fields) > File "/var/www/web2py/gluon/dal.py", line 4429, in insert > return self._db._adapter.insert(self,self._listify(fields)) > File "/var/www/web2py/gluon/dal.py", line 4422, in _listify > raise SyntaxError,'Table: missing required field: %s' % ofield.name > SyntaxError: Table: missing required field: userid > > Both > db.guys.userid.default = auth.user_id > OR > db.guys.userid.compute = lambda f: uid > OR both together didn't worked. > When I set writable=True, the insertion was successful. > > Then I changed the required=False: > > Field('userid', db.auth_user, unique=True, required=False, > writable=False, readable=False) > > And it worked correctly, saving the user. Is this the expected > behavior? Now its working, but I thing this really strange to me. > > Allan Daemon > > -----BEGIN GEEK CODE BLOCK----- > Version: 3.1 > GAT/CS/CM/ED/IT/MC/CA/SS/G/H d-- s++:+ a--(?) C++(++++) UBS+++>$ P++ > Py+++>+++++$ L+ E--- > W++ N++ o- K+ w++ !O M++ V-- PS++ PE- Y++ PGP++>+++ t 5? X R>+++ tv--() b DI+ > D+ G++>++++ e+>++++ h r-->+++ y++**>$? > ------END GEEK CODE BLOCK------

