Yeah, I should have included a small script. The script I am using is fairly large, though.
Here is an outline of my script which should hit the most salient details. movie = {} for tag in tags: movie[title] = #parsed from xml directly movie[genres] = # genre names pulled from xml. If new, added to genre table. IDs returned as list with this ids = [r.id for r in db(db.genre.api_id.belongs(api_vals)).select(db.genre.id)] Object tested for type and values movie[actors] = #same as genre but uses person table for movie.actors movie[directors] = #same as genre but uses person for movie.directors (both actors/directors use person table. Could this be a prob?) db.validate_and_insert(**movie) On Wednesday, August 22, 2012 3:37:11 PM UTC-4, Niphlod wrote: > > Don't get if it is fixed, anyway I can't reproduce. > BTW: it's always better to post a simple script to reproduce the issue > (simpler for you to check for copy/paste errors and for who helps) > > db.py > > db.define_table('genres', > Field('name') > ) > > db.define_table('movies', > Field('name'), > Field('genres','string','list:reference genres', requires= > IS_IN_DB(db, 'genres.id', '%(name)s [%(id)s]', multiple=True)) > ) > > > > > shell > >>> db.genres.insert(name='horror') > 1 > >>> db.genres.insert(name='comedy') > 2 > >>> db.movies.insert(name='terminator', genres=[1,2]) > 1 > >>> db.movies.insert(name='alien', genres=[2]) > 2 > >>> db.movies.insert(name='alien2', genres=[2]) > 3 > >>> print db(db.movies.id>0).select() > movies.id,movies.name,movies.genres > 1,terminator,|1|2| > 2,alien,|2| > 3,alien2,|1| > > >>> db.movies.insert(name='alien2', genres=[1,6]) > 4 > >>> print db(db.movies.id>0).select() > movies.id,movies.name,movies.genres > 1,terminator,|1|2| > 2,alien,|2| > 3,alien2,|1| > 4,alien2,|1|6| > > >>> db.movies.validate_and_insert(name='alien2', genres=[1]) > <Row {'errors': <Row {}>, 'id': 5}> > >>> db.movies.validate_and_insert(name='alien3', genres=[1]) > <Row {'errors': <Row {}>, 'id': 6}> > >>> db.movies.validate_and_insert(name='alien3', genres=[1,2]) > <Row {'errors': <Row {}>, 'id': 7}> > >>> print db(db.movies.id>0).select() > movies.id,movies.name,movies.genres > 1,terminator,|1|2| > 2,alien,|2| > 3,alien2,|1| > 4,alien2,|1|6| > 5,alien2,|1| > 6,alien3,|1| > 7,alien3,|1|2| > > >>> db.movies.validate_and_insert(name='alien3', genres=[1,6]) > <Row {'errors': <Row {'genres': 'value not in database'}>, 'id': None}> > > > > > > All is working ok. > > > --