【发布时间】:2017-04-05 21:14:32
【问题描述】:
如何在自定义模块odoo 9中在数据库中插入新记录之前检查记录是否存在?
例如:
如果在表 project.task 中我们在下面的代码中有名称“PARIS”和 date_deadline“2017-01-01”,我需要在执行前发出警告...
vals = {'name': 'PARIS','date_deadline': '2017-01-01']}
create_new_task = http.request.env['project.task'].create(vals)
或者在点击按钮保存之前尝试从 name='PARIS' 和 date_deadline='2017-01-01' 的 project.task 获取计数!
任何简单的解决方案?
@api.one
@api.constrains('date','time') #Time is Many2one
def _check_existing(self):
count = self.env['test.module'].search_count([('date','=',self.date),('time','=',self.time.id)])
print(self.date) #2017-01-01
print(self.time.id) #1
if(count >= 1):
raise ValidationError(_('DUPLICATE!'))
尝试在日期 = 2017-02-02 且时间 = 1 的数据库中插入新记录后,收到此消息:
重复键值违反唯一约束“test_module_time_uniq” DETAIL:键(时间)=(1)已经存在。
时间存在,但日期不同!我需要 2 个值的约束!在数据库中,我只有一行 date = 2017-01-01 和 time = 1
【问题讨论】:
-
您在时间字段上定义了一个 sql 唯一约束 (
test_module_time_uniq)。你只需要删除它,它应该可以工作。