OpenERP - 为什么在创建新记录时在create()之后调用方法write()?

时间:2014-12-08 17:32:16

标签: openerp odoo

在class_product类中,我覆盖了create()write()方法。但是,当我创建新产品时,会调用create()以及write()。我的理解是只应调用create()。我做错了什么?

以下是代码:

class product_product(osv.Model):
    _inherit = 'product.product'

    def create(self, cr, uid, vals, context=None):
        default_code = vals.get('default_code')
        categ_id = vals.get('categ_id')
        class_number = self.pool.get('product.category').browse(cr, uid, categ_id, context=context).x_category_code 
        item_number_validation_check(default_code, class_number)   
        # If default_code already exist, raise error
        pp_obj = self.pool.get('product.product')
        id_s = pp_obj.search(cr, uid,  [('default_code', '=', default_code)])
        if len(id_s) != 0:
            raise osv.except_osv(('Error!'), ('The item number already exists!' ) )
        return super(product_product, self).create(cr, uid, vals, context=context)

    def write(self, cr, uid, ids, vals, context=None):
        new_default_code = vals.get('default_code')

1 个答案:

答案 0 :(得分:0)

通常,正如您所说,不应在产品创建时调用write方法。

在这种情况下,我认为您可以做的更好的是在您的create方法中放置一个调试器断点,然后输入父的create,以查看它是否正在调用write()。

还有一个补充说明,我很确定在写作中你还应该调用super()。