#orm #openerp-7
#orm #openerp-7
Вопрос:
У меня есть следующая модель в OpenERP 7. Как указать, что isbn
поле должно быть первичным ключом.
from osv import osv, fields
class Book(osv.Model):
""" A book """
_name = 'helloworld.book'
_columns = {
'isbn' : fields.char('ISBN', size=9, requried=True),
'title' : fields.char('Title', size=100, required=True),
'genre' : fields.char('Genre', size=20, required=True),
}
Ответ №1:
Первичный ключ — это специальный столбец таблицы реляционной базы данных (или комбинация столбцов), предназначенный для уникальной идентификации всех записей таблицы.
Основными функциями первичного ключа являются:
-
Оно должно содержать уникальное значение для каждой строки данных.
-
Оно не может содержать нулевые значения.
Первичный ключ — это либо существующий столбец таблицы, либо столбец, который специально генерируется базой данных в соответствии с определенной последовательностью.
OpenERP поддерживает это, сохраняя уникальное ограничение sql для поля.
_sql_constraints = [
('my_key_value', 'unique(key_value1,key_value2)', 'key value has to be unique !')
]
В вашем случае, поскольку вы выбрали тип поля Char, установите ограничение sql следующим образом.Добавьте это в свой класс. и перезапустите сервер и проверьте еще раз. Вы найдете функциональность первичного ключа в поле ‘isbn’.
_sql_constraints = [
('isbn_uniq', 'unique(isbn)', 'ISBN must be unique!'),
]
Для ограничений без учета регистра,
def _check_unique_insesitive(self, cr, uid, ids, context=None):
sr_ids = self.search(cr, uid ,[], context=context)
lst = [x.ibsn.lower() for x in self.browse(cr, uid, sr_ids, context=context) if x.ibsn]
for self_obj in self.browse(cr, uid, ids, context=context):
if self_obj.ibsn and self_obj.ibsn.lower() in lst:
return False
return True
_constraints = [(_check_unique_insesitive, 'Error: ISBN must be unique!', ['ibsn'])]
Надеюсь, это вам поможет. 🙂
Комментарии:
1. Я уже пробовал это, но это не работает :
_sql_constraints = [ ('unique_isbn', 'unique(isbn)', 'The ISBN must be unique'), ('unique_title', 'unique(title)', 'The title must be unique') ]
2. Для нечувствительности к регистру вы должны установить ограничение. проверьте мой обновленный ответ.