如何根据odoo中的id和status检查记录的存在

时间:2017-04-13 09:50:46

标签: openerp

在检查先前记录是否未处于“开放”状态后,如何针对具有“开放”状态的患者创建新的检查记录。如果存在则显示错误,否则创建新记录。

下面的代码没有正确检查'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            

2 个答案:

答案 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