在检查先前记录是否未处于“开放”状态后,如何针对具有“开放”状态的患者创建新的检查记录。如果存在则显示错误,否则创建新记录。
下面的代码没有正确检查'if record.id:'中的记录是否存在,所以直接引发错误信息。
这是我的代码:
@api.multi
@api.constrains('status', 'patient_id')
def _checkstatus(self):
res = []
for record in self:
if record.id:
if record.status == 'open':
raise ValidationError(_('You can not create new visit until patient checked out !' ))
else:
res = self.status
else:
res = self.status
return res
答案 0 :(得分:4)
您必须首先获取患者和状态==打开的所有记录。 那样,
self.env['your.model.name'].search([('patient_id', '=', patient_id), ('status', '=', 'open')])
如果找到记录则会引发错误。 这里写一个代码为ex。根据您的代码更改名称。
@api.multi
@api.constrains('status', 'patient_id')
def _checkstatus(self):
res = []
modelObj = self.env['your.model.name']
for record in self:
rec = modelObj.search([('patient_id', '=', record.patient_id), ('status', '=', 'open')])
if rec:
raise ValidationError(_('You can not create new visit until patient checked out !' ))
else:
// write a login if there is not found any open record with patient
return res
答案 1 :(得分:0)
在Odoo中,在评估约束时,已经创建/更新了记录。
这意味着,在您的情况下,您需要从查找数据排除当前记录集(您想知道其他患者条目是否处于“打开”状态)。
在此处引发错误会导致Odoo rollback显示其交易数据,并阻止任何持续修改。
@api.multi
@api.constrains('status', 'patient_id')
def _checkstatus(self):
# retrieve patients in the current records
patients_tocheck = self.mapped('patient_id')
duplicates == self.search([('patient_id', 'in', patients_tocheck.ids), ('id', 'not in', self.ids), ('status', '=', 'open')])
if duplicates:
raise ValidationError(_('You can not create new visit until patient checked out !' ))
# moreover, you don't need to return any value, Odoo only see if you raise any error, or not