> > db.combinada.primero.requires = > [IS_NOT_IN_DB(db(db.combinada.combinado==str(request.vars.primero) > +str(request.vars.segundo)), "combinada.combinado"), IS_NOT_EMPTY()] >
The value of request.vars.primero will be passed to the above IS_NOT_IN_DB validator, but it is then comparing that value against values in the "combinado" field -- so even when the "combinado" value is duplicated, it won't return an error because the value of "primero" won't match the duplicated value of "combinado". Instead, you should compare the value of request.vars.primero to values in the "primero" field, but only among the set of records that match the current value of request.vars.segundo -- that's what the example on Stack Overflow is doing. The idea is that you're looking for a set of records where "primero" is duplicated among a set of records where "segundo" is also duplicated, which implies that the combination of "primero" and "segundo" is duplicated. db.combinada.primero.requires = [IS_NOT_IN_DB(db(db.combinada.segundo==request.vars.segundo), "combinada.primero", error_message='The combination of primero and segundo must be unique'), IS_NOT_EMPTY()] Anthony