Again, if just focused on form validation, I suppose another option would be to use an onvalidation function (processed after form validation but before db insert).
Anthony On Tuesday, October 11, 2011 7:23:33 AM UTC-4, Anthony wrote: > > On Tuesday, October 11, 2011 4:04:41 AM UTC-4, spyker wrote: >> >> I have several tables where there should only be one possible combination >> of two uuid-fields per table (mostly many to many links). >> >> I have created 'unique' constraints for those fields in Postgresql so the >> database would not accept any inserts or edits which violates that >> constraint. >> >> I use that in combination with 'try:.. except:' to insert data. >> >> Can DAL be used in a way for this? As far as I understand the >> IS_NOT_IN_DB validators that it is working on form-level and not on database >> level and I am not sure whether it can be used for a combination of fields >> (unless I do it with a computed field - which will use up a lot of extra >> resources). > > > If you only need to validate form submissions (and not other means of > making inserts), then you could do something like: > > db.define_table('mytable', > Field('field1'), > Field('field2', > requires=IS_NOT_IN_DB(db(db.mytable.field1==request.vars.field1), > 'mytable.field2'))) > > That will make sure field2 is unique among the set of records where field1 > matches the new value of field1 being inserted (so the combination of field1 > and field2 must be unique). It depends on the values being available in > request.vars, so not relevant for non-form inserts (though in that case, I > suppose you could create your own request.vars as a hack). > > Anthony > > > > >