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

Reply via email to