Here's my code:

db.py:
db.define_table(
    "accounts",
    Field("name","string",length=128,default=''),
    Field("email","string",length=128,default=''),
    Field('username', length=128,default='',unique=True),
    Field('password', 'password', length=512, readable=False,
label='Password')
    )

db.accounts.name.requires = IS_NOT_EMPTY()
db.accounts.password.requires = CRYPT(key=auth.settings.hmac_key)

db.define_table(
    "mytextbase",
    Field("mytext","string",length=512,default=''),
    Field("accountid",db.accounts)
    )

db.mytextbase.accountid.requires = IS_IN_DB(db,"accounts.id")

#Custom user-table to set accountid
db.define_table(
    auth.settings.table_user_name,
    Field('first_name', length=128, default=''),
    Field('last_name', length=128, default=''),
    Field('email', length=128, default='', unique=True),
    Field('username', length=128,default='',unique=True),
    Field('password', 'password', length=512, readable=False,
label='Password'),
    Field('registration_key', length=512,
          writable=False, readable=False, default=''),
    Field('reset_password_key', length=512,
          writable=False, readable=False, default=''),
    Field('registration_id', length=512,
          writable=False, readable=False, default=''),
    Field('accountid', db.accounts)
    )

custom_auth_table = db[auth.settings.table_user_name]
custom_auth_table.first_name.requires =
IS_NOT_EMPTY(error_message=auth.messages.is_empty)
custom_auth_table.last_name.requires =
IS_NOT_EMPTY(error_message=auth.messages.is_empty)
custom_auth_table.password.requires = [CRYPT()]
custom_auth_table.email.requires = [
  IS_EMAIL(error_message=auth.messages.invalid_email),
  IS_NOT_IN_DB(db, custom_auth_table.email)]


and my control.py:
def add():
    form=SQLFORM(db.mytextbase)
    request.vars.accountid = session.auth.user.accountid
    if form.accepts(request.vars,session):
        response.flash = "Added successfully! :)"
    elif form.errors:
        response.flash = "Something went wrong! :("
    else:
        response.flash = "Fill the form!"
    return dict(form=form)

With these my form only complains that accountid is:nt found in the
database


On Feb 16, 10:19 pm, villas <villa...@gmail.com> wrote:
> It should be easy. Post your relevant model and controller code.
>
> BTW it probably doesn't make any difference...  but maybe you might
> consider using the notation account_id instead of accountID.  I read
> somewhere that some databases have case sensitive fields and that
> web2py makes some assumptions about this.  Just better to work all in
> lowercase and avoid hitting that possible complication in the
> future. :)
>
> Regards,  D
>
> On Feb 16, 6:47 pm, Oskari <oskari.pe...@gmail.com> wrote:
>
>
>
>
>
>
>
> > I'm still struggling with the IS_IN_DB-validator. This problem occurs
> > when trying to implement reference id for example via a controller
> > line:
> > request.vars.reftableid = 2
>
> > The form just informs it isn't in the database. Why is that?
>
> > On Feb 13, 3:14 pm, Oskari <oskari.pe...@gmail.com> wrote:
>
> > > Uncommenting that did the trick. Perhaps there was something wrong
> > > with that =)
>
> > > Anyways, thanks!
>
> > > On Feb 13, 3:17 am, villas <villa...@gmail.com> wrote:
>
> > > > Try commenting out the line 'custom_auth_table.accountID.requires...'
> > > > If that doesn't give you any progress, post all your auth model. I'm
> > > > sure someone should be able to spot something  obvious -- these bugs
> > > > can be right under our noses sometimes :)
> > > > -D
>
> > > > On Feb 12, 11:03 pm, Oskari <oskari.pe...@gmail.com> wrote:
>
> > > > > Thank you for your answer villas!
>
> > > > > I don't think that is the problem. I am able to make inserts through
> > > > > the appadmin-site, but somehow it fails with form.accepts().
> > > > > I also tried what you suggested, but could not quite get it working.
>
> > > > > On Feb 12, 8:45 pm, villas <villa...@gmail.com> wrote:
>
> > > > > > Not sure, but the 3rd attrib of 'IS_IN_DB' doesn't look right?
>
> > > > > > Maybe if you tried something like this, e.g.
> > > > > > custom_auth_table.accountID.requires = IS_IN_DB(db,db.accounts.id,'%
> > > > > > (name)s')
>
> > > > > > On Feb 12, 1:28 pm, Oskari <oskari.pe...@gmail.com> wrote:
>
> > > > > > > Hi!
>
> > > > > > > I'm having trouble making an insert with form.accepts()
>
> > > > > > > Currently I have a custom auth_user that has one extra field:
> > > > > > > Field('accountID', db.accounts) with
> > > > > > > custom_auth_table.accountID.requires = 
> > > > > > > IS_IN_DB(db,db.accounts.id,id)
>
> > > > > > > While trying to modify variables it fails with "not found in db"
>
> > > > > > > def func():
> > > > > > >     form=SQLFORM(db.auth_user)
> > > > > > >     request.vars.accountID = 1
> > > > > > >     if form.accepts(request.vars,session):
> > > > > > >         response.flash = "Succesfully created user"
> > > > > > >     return dict(form=form)
>
> > > > > > > Why does not form.accepts() recognize and accept my accountID?

Reply via email to