Подтвердить что ты не робот

Уникальное ограничение OpenERP

У меня есть таблица в OpenERP/PostgreSQL со следующими столбцами: name и description.

Я добавил следующую проверку для уникального имени:

_sql_constraints = [('unique_name', 'unique(name)', 'A record with the same name already exists.')]

Он отлично работает, но чувствителен к регистру. В настоящее время он принимает такие ценности, как "Микки", "MICKEY" и "mickey":

Wrong Way:
--------------------------
| name   | description   |
--------------------------
| mickey | not a mouse   |
--------------------------
| MICKEY | not a mouse   |
--------------------------
| Mickey | not a mouse   |
--------------------------

Есть ли способ пересмотреть код проверки, чтобы он не позволял пользователям добавлять несколько значений, таких как "Микки", "MICKEY" и "mickey"? Как я могу сделать уникальный регистр проверки подлинности нечувствительным?

Right Way:
--------------------------------
| name         | description   |
--------------------------------
| mickey       | not a mouse   |
--------------------------------
| mickey mouse | is a mouse    |
--------------------------------
| donald       | is a duck     |
--------------------------------
4b9b3361

Ответ 1

Для case insensitive constraints выберите ЗДЕСЬ иначе вы всегда можете использовать Openerp Constraints вместо SQL.

для openerp Ограничения

проверьте пример

def _check_unique_insesitive(self, cr, uid, ids, context=None):
    sr_ids = self.search(cr, 1 ,[], context=context)
    lst = [
            x.FIELD.lower() for x in self.browse(cr, uid, sr_ids, context=context)
            if x.FIELD and x.id not in ids
          ]
    for self_obj in self.browse(cr, uid, ids, context=context):
        if self_obj.FILD and self_obj.FILD.lower() in  lst:
            return False
    return True

_constraints = [(_check_unique_insesitive, 'Error: UNIQUE MSG', ['FIELD'])]