Odoo 10:如何知道记录已经在数据库中还是新记录?

时间:2020-02-02 08:49:55

标签: python odoo


我正在计算x记录的平均值,但我不想包括最后一个记录(触发操作的记录)。我可以在现有记录或新记录中触发操作(尚未在数据库)。
这是我的代码:

@api.one
@api.depends('stc')
def _compute_average_gross(self):
    if self.stc:
        base_seniority = 12
        match_seniority = self.seniority.split()
        total_seniority = int(match_seniority[0]) + int(match_seniority[2]) * 12
        if total_seniority < 12:
            base_seniority = total_seniority if total_seniority else 1  # avoid dividing by 0
        # if the hr.payslip is already in db
        if self._origin.id:
            limit = 13
            # could be self.env.cr.execute() 
            sum_sbr = sum(self.search([('employee_id', '=', self.employee_id.id)], order='create_date desc', limit=limit)[1:].mapped('line_ids').filtered(lambda x: x.code == 'SBR').mapped('amount'))
            sum_average_gross = sum(self.search([('employee_id', '=', self.employee_id.id)], order='create_date desc', limit=limit)[1:].mapped('average_gross'))
        else:
            limit = 12
            # could be self.env.cr.execute() 
            sum_sbr = sum(self.search([('employee_id', '=', self.employee_id.id)], order='create_date desc', limit=limit).mapped('line_ids').filtered(lambda x: x.code == 'SBR').mapped('amount'))
            sum_average_gross = sum(self.search([('employee_id', '=', self.employee_id.id)], order='create_date desc', limit=limit).mapped('average_gross'))
        self.average_gross = round((sum_sbr + sum_average_gross) / base_seniority, 2)

我遇到一个错误,那就是self没有_origin,我尝试使用origin却遇到了同样的错误。我也尝试过使用self.context ['params']。get('id'),但无法正常工作。
你能帮我吗?

1 个答案:

答案 0 :(得分:2)

要检查记录是否未保存在数据库中,请执行以下操作:

if isinstance(self.id, models.NewId): 
    # record is not saved in database.
    # do your logic

# record is saved in databse
if not isinstance(self.id, models.NewId):
    # .... 
相关问题