Two things...
1)

  db.firm.name.requires = [IS_NOT_EMPTY(), IS_NOT_IN_DB(db,
'firm.name')]

and

  db.firm.name.requires = IS_NOT_IN_DB(db, 'firm.name')

are equivalent. Is not in db, does not accept empty anyway.
Back to your question.

You can make your own validator:

class IS_NOT_IN_DB_ANYCASE:
    def __init__(self,db, field, error_message='oops')
        self.db=db
        self.tablename,self.fieldname=field.split('.')
        self.error_message=error_message
    def __call__(self,value):
        if self.db(self.db[self.tablename]
[self.fieldname].like(value)).count():
            return (value,self.error_message)
        return (value,None)

db.firm.name.requires = IS_NOT_IN_DB_ANYCASE(db, 'firm.name')

but using like is way less efficient that not IS_NOT_IN_DB.

On Oct 16, 5:18 pm, oneroler <[email protected]> wrote:
> I just started working with web2py and have what is probably a simple
> question on database validation.  Below is what I have in db.py.
> Currently this will allow duplicate names that are in different cases
> (e.g. Firm 1 and firm 1).  I want to make it so that it won't allow
> this but stores the name in the database the way the person enters it,
> so I don't want to convert everything to upper or lowercase and store
> it that way.  Thanks in advance for any help.
>
> db.define_table('firm',
>     Field('name', unique=True))
>
> db.firm.name.requires = [IS_NOT_EMPTY(), IS_NOT_IN_DB(db, 'firm.name')]

Reply via email to