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?

Reply via email to