Уникальное ограничение 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 |
--------------------------------
Ответы
Ответ 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'])]