2015-09-30 3 views
2

В Odoo количество продукта рассчитывается каждый раз, когда открывается форма продукта. Это происходит в модели product.product ==> function _product_available.Odoo: как переопределить исходную функцию

Эта функция возвращает словарь с именем res.

Пример:

res = {8: {'qty_available': 5000.0, 'outgoing_qty': 1778.5, 'virtual_available': 3221.5, 'incoming_qty': 0.0}} 

Теперь я хочу, чтобы изменить эти значения. Мне удалось это сделать, закодировав его непосредственно в исходной функции _product_available.

Поскольку это неправильный способ сделать это, я хочу сделать это в унаследованной модели. Я думаю, мне нужно переопределить функцию? Или перезаписать? Не уверен, что это называется.

Все, что я читал об этом, довольно расплывчато для меня. Я не могу найти много хорошей информации или примеров. Я также борюсь с тем, что оригинальная функция написана в старом стиле (osv), в то время как я использую новый стиль (модели).

Из частей информации, которую я собрал в Интернете, я написал что-то вроде этого (что не работает).

class product_product_inherit(models.Model): 
    _inherit = 'product.product' 

    #api.v7 because of old style? Also tried .multi and .model... 
    @api.v7 
    def _product_available(self, cr, uid, ids, field_names=None, arg=False, context=None): 
     #example of modified values. To be made variable after this is working. 
     res = {8: {'qty_available': 200.222, 'outgoing_qty': 1778.5, 'virtual_available': 30205.263671875, 'incoming_qty': 0.0}} 
     result = super(C, self)._product_available(res)  
     return result 

Кто-нибудь знает, как правильно изменить возвращенный словарь исходной функции _product_available?

Как я получил это работает:

class product_product_inherit(models.Model): 
    _inherit = 'product.product' 

    def _product_available(self, cr, uid, ids, field_names=None, arg=False, context=None): 
     for product in self.browse(cr, uid, ids, context=context): 
      id = product.id 
      res = {id: {'qty_available': 200.222, 'outgoing_qty': 1778.5, 'virtual_available': 30205.263671875, 'incoming_qty': 0.0}} 
     return res 

Просто определяется точно такой же метод, как и в оригинальной модели.

ответ

0

Я думаю, вы можете попробовать это.

class ProductProductInherit(models.Model): 
    _inherit = 'product.product' 

    @api.multi 
    def _product_available(self, field_names=None, arg=False): 
     #example of modified values. To be made variable after this is working. 
     res = {8: {'qty_available': 200.222, 'outgoing_qty': 1778.5, 'virtual_available': 30205.263671875, 'incoming_qty': 0.0}} 
     result = super(ProductProductInherit, self)._product_available(res)  
     return result 
+0

Получил это уже сейчас. Спасибо, в любом случае! Я опубликую, как я это сделал в своем OP. – RobbeM