0

需要将默认值存储在 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

视图.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>
4

1 回答 1

0

一种解决方案是使用函数作为字段的默认值:

嘟嘟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

嘟嘟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 之间的差异将返回到表单。

于 2015-12-24T06:04:15.350 回答