Check out IS_IN_DB and IS_NOT_IN_DB here: http://www.web2py.com/book/default/chapter/07#Database-Validators
Are you creating the tables in native SQLite? On Dec 8, 3:22 pm, nick name <[email protected]> wrote: > I want to have a non-null foreign key reference, e.g. > > owner = db.define_table('owner'', Field('name')) > package = db.define_table('package', Field('owner_id', owner, > notnull=True), Field('name')) > > SQLite for example has no problem with this: > > sqlite> create table owner(id int primary key, name text); > sqlite> create table package(id int primary key, owner_id references owner > not null, name text); > sqlite> insert into owner values(1, "web2py"); > sqlite> insert into package values(1, 1, "markmin"); > sqlite> insert into package values(2, null, "hello"); > Error: package.owner_id may not be NULL > > However, web2py will not put a "not null" qualifier on the foreign key > reference; there is a specific check to NOT add a "not null" if the field > is an id field or it is a reference field. Why is that? > > A bug in my app relating to this was just discovered by a user; I was > relying on the database to signal an IntegrityError and fail to insert > records that have a null reference, but they got in anyway. > > validate_and_insert will actually catch this -- but, why doesn't web2py > append the NOT NULL?

