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