我在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),
}
答案 0 :(得分:0)
主键是指定用于唯一标识所有表记录的特殊关系数据库表列(或列组合)。
主键的主要功能是:
每行数据必须包含唯一值。
它不能包含空值。
主键是现有的表列,或者是由数据库根据定义的顺序专门生成的列。
OpenERP通过在字段上保持唯一的sql约束来支持它。
_sql_constraints = [
('my_key_value', 'unique(key_value1,key_value2)', 'key value has to be unique !')
]
在你的情况下,你选择了Char类型的Field,像这样设置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'])]
希望这会对你有所帮助。 :)