如何在现有数量的自定义字段中存储默认输入值。

时间:2015-12-24 05:52:28

标签: openerp odoo-8 odoo-view

需要在M.sqr中的qty上存储默认值,并且需要在手边显示默认输入值的数量的平方米。

从产品库存页面点击手头数量的更新按钮的时候 然后它应该显示我之前输入的值。

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

1 个答案:

答案 0 :(得分:0)

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

odoo V8

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

_defaults = {
    'your_field' : _your_function,
    }

odoo V7

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

<强> @ api.onchange

如果装饰器中指定的任何字段在表单中更改,则此装饰器将触发对装饰函数的调用:

QString fileName = QFileDialog::getOpenFileName(this,
                                            tr("Open Image"),".",
                                            tr("Image Files(*.png *.jpg *.jpeg *.bmp)"));
image = cv::imread(fileName.toUtf8().data());
if(!image.data){
    qDebug()<< "Could not open or find the image";
    return ;
}
QString status = QString::number(image.rows) + "x" +        
QString::number(image.cols);
ui->label_2->setText(status);
//show 
cv::namedWindow("Original Image");
cv::imshow("Original Image",image);

在上一个示例中,self对应于当前在表单上编辑的记录。在on_change上下文中,所有工作都在缓存中完成。因此,您可以在函数内部更改RecordSet,而无需担心更改数据库。这是@ api.depends

的主要区别

在函数返回时,缓存和RecordSet之间的差异将返回到表单。