I fixed it with a custom validator as howesc suggested.Basically i added a second set parameter which has the selected items of other products, without changing the items that the widget will use, but affecting the final values variable used for persistence: class CUSTOM_IS_IN_DB(Validator): def __init__( self, dbset, dbsetOtherProducts, .... if not [x for x in values if not x in self.theset]: values =values + self.thesetOtherProducts return (values, None) ....
now that the issue is solved, due to the amount of time spent on it, perhaps was easier to split each select in a different table... for each category. Thanks for the help provided