В классе product_product я переоценил методы create()
и write()
. Но когда я создаю новый продукт, вызывается create()
, а также write()
. Я понимаю, что нужно называть только create()
. Что я делаю не так?OpenERP - Почему метод 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')
Замечание: вы должны добавить уникальное ограничение уровня SQL на default_code, а не выполнять проверку там. Вы предположение похоже правильный. Однако это действительно зависит от экземпляра и установленных модулей. Например, в экземпляре может быть другой аддон, который переопределяет создание и вызывает запись. Чтобы лучше понять, вам нужно опубликовать трассировку стека, когда вы достигнете вызова вашей реализации write(). –
Спасибо за комментарий. – Nebojsa