2015-12-24 3 views
0

Необходимо сохранить значение по умолчанию на qty в M.sqr и квадратный метр, например, количество, отображаемое по умолчанию.Как сохранить введенное значение по умолчанию в настраиваемом поле количества в руке.?

Когда я нажимаю кнопку обновления количества на руке с товарной страницы инвентаря , тогда она должна показывать мне предыдущее введенное значение.

класс stock_change_product_qty (osv.osv):

_inherit = 'stock.change.product.qty' 
_columns = { 
    'new_quantity' : fields.float('Qty in Boxes'), 
    'squ_meter': fields.related('product_id','squ_meter', type='float', relation='product.product', string='Square Meter'), 
    'qty_char': fields.float('Qty in M.sqr', compute='_compute_qty_char'), 

} 

@api.depends('new_quantity', 'squ_meter') 
def _compute_qty_char(self): 
    for record in self: 
     record.qty_char = record.new_quantity * record.squ_meter 

view.xml

 <field name="name">update_product_quantity inherit</field> 
     <field name="model">stock.change.product.qty</field> 
     <field name="inherit_id" ref="stock.view_change_product_quantity"/> 
     <field name="arch" type="xml"> 

      <xpath expr="//field[@name='new_quantity']" position="attributes"> 
       <attribute name="string">Qty in Boxes</attribute> 
      </xpath> 
    <xpath expr="//field[@name='new_quantity']" position="replace"> 

       <field name="new_quantity"/> 
       <field name="squ_meter"/> 
       <field name="qty_char"/> 

      </xpath> 
     </field> 
    </record> 

ответ

0

Решение состоит в том, чтобы использовать функцию в качестве значения по умолчанию для поля:

odoo V8

from openerp import api, fields, models 

class stock_change_product_qty(models.Model): 

    _inherit = 'stock.change.product.qty' 

    new_quantity = fields.Float(string='Qty in Boxes', default=1.0), 
    squ_meter = fields.Float(related='product_id.squ_meter', string='Square Meter', default=1.0), 
    qty_char = fields.Float('Qty in M.sqr', compute='_compute_qty_char'), 

     } 

    @api.one 
    @api.depends('new_quantity', 'squ_meter') 
    def _compute_qty_char(self): 
     for record in self: 
      record.qty_char = record.new_quantity * record.squ_meter 

odoo V7

def _your_function(self, cr, uid, context=None): 
    your code here 
    ... 
    ... 
    ... 
    return field_value 

_defaults = { 
    'your_field' : _your_function, 
    } 

@ api.onchange

Этот декоратор будет инициировать вызов декорированной функции, если какой-либо из полей, указанных в декоратора изменяется в форме:

@api.onchange('fieldx') 
def do_stuff(self): 
    if self.fieldx == x: 
     self.fieldy = 'toto' 

В предыдущем примере self соответствует записи в настоящее время отредактирован в форме. Когда в контексте on_change вся работа выполняется в кеше. Таким образом, вы можете изменять RecordSet внутри своей функции, не беспокоясь об изменении базы данных. Это основное отличие от @ api.depends

При возврате функции в форму будут возвращены различия между кешем и RecordSet.

+0

Привет, вы можете объяснить мне, почему я использовал это решение, и дал мне ошибку TypeError: _compute_qty_char() принимает ровно 1 аргумент (4 данных) –

+0

Я обновляю свои ан. отметьте это –

+0

спасибо jainik, но одна проблема по-прежнему остается в том, что значение количества на руке показывает мне в моем настраиваемом поле, которое мне не нужно. Моя потребность в том, что у меня уже есть поле количества, когда я ввожу какие-либо значения в этом поле в то время было создано другое настраиваемое поле, которое у меня есть квадратный метр, поэтому значение этого поля умножается на количество в поле «Рука» после этого, независимо от того, какое значение имеет значение, отображаемое в моем другом настраиваемом поле, которое является qty_char, и это значение мне нужно получить хранится до и до тех пор, пока я не изменю, помогите мне –