Odoo - 浮动字段不在树视图上显示值
Odoo - float field not display value on tree view
我已将自定义浮动字段添加到表单中,并使用该字段显示在树视图中
但实际上在表单内部,该字段计算出正确的值并正常工作,但在树视图列中它显示所有记录的 0.00 值.. 为什么?
这是我的模型代码:
from odoo import models, fields, api
class PickingTotalQty(models.Model):
_inherit = 'stock.picking'
sum_dmd_qty = fields.Float(compute='calculate_dmd_qty', string='Total Demand Quantity')
sum_reserved_qty = fields.Float(compute='calculate_reserved_qty', string='Total Reserved Quantity')
reserved_qty_per = fields.Float(compute='calculate_reserved_per', string='Reserved (%)')
def calculate_dmd_qty(self):
for rs in self:
dmdqty = 0
for line in rs.move_lines:
dmdqty += line.product_uom_qty
rs.sum_dmd_qty = dmdqty
def calculate_reserved_qty(self):
for rs in self:
reservedqty = 0
for line in rs.move_lines:
reservedqty += line.reserved_availability
rs.sum_reserved_qty = reservedqty
@api.depends('sum_reserved_qty', 'sum_dmd_qty')
def calculate_reserved_per(self):
for rec in self:
if rec.sum_dmd_qty > 0:
rec.reserved_qty_per = rec.sum_reserved_qty / rec.sum_dmd_qty
这里是XML查看代码:
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="inherit_stock_picking_form_view" model="ir.ui.view">
<field name="name">Stock Picking</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_form"/>
<field name="arch" type="xml">
<xpath expr="/form/sheet/notebook" position="after">
<group>
<group>
<field name="reserved_qty_per" nolabel="0"/>
</group>
</group>
</xpath>
</field>
</record>
<record id="inherit_stock_picking_tree_view2" model="ir.ui.view">
<field name="name">Stock Picking2</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.vpicktree"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='state']" position="after">
<field name="reserved_qty_per"/>
</xpath>
</field>
</record>
</data>
</odoo>
sum
值为每条记录重新初始化并在 for 循环之外赋值,除了树视图中的最后一条记录外,计算将不起作用。这些方法是用一个记录集调用的,在表单视图中它是用一个只包含一条记录的记录集调用的,这就是它在表单视图而不是树视图中工作的原因。
要更正该问题,请将前两个方法的最后一行移动到第一个循环中。
depends装饰器缺失,尝试添加。
示例:
@api.depends("move_lines.product_uom_qty")
def calculate_dmd_qty(self):
for rs in self:
dmdqty = 0
for line in rs.move_ids_without_package:
dmdqty += line.product_uom_qty
rs.sum_dmd_qty = dmdqty
@api.depends("move_lines.reserved_availability")
def calculate_reserved_qty(self):
for rs in self:
reservedqty = 0
for line in rs.move_ids_without_package:
reservedqty += line.reserved_availability
rs.sum_reserved_qty = reservedqty
编辑:
<odoo>
<record id="view_picking_form" model="ir.ui.view">
<field name="name">view.picking.form</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_form"/>
<field name="arch" type="xml">
<xpath expr='//notebook' position="after">
<group>
<field name="reserved_qty_per"/>
</group>
</xpath>
</field>
</record>
<record id="vpicktree" model="ir.ui.view">
<field name="name">view.vpicktree</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.vpicktree"/>
<field name="arch" type="xml">
<field name="state" position="before">
<field name="reserved_qty_per"/>
</field>
</field>
</record>
</odoo>
我已将自定义浮动字段添加到表单中,并使用该字段显示在树视图中
但实际上在表单内部,该字段计算出正确的值并正常工作,但在树视图列中它显示所有记录的 0.00 值.. 为什么?
这是我的模型代码:
from odoo import models, fields, api
class PickingTotalQty(models.Model):
_inherit = 'stock.picking'
sum_dmd_qty = fields.Float(compute='calculate_dmd_qty', string='Total Demand Quantity')
sum_reserved_qty = fields.Float(compute='calculate_reserved_qty', string='Total Reserved Quantity')
reserved_qty_per = fields.Float(compute='calculate_reserved_per', string='Reserved (%)')
def calculate_dmd_qty(self):
for rs in self:
dmdqty = 0
for line in rs.move_lines:
dmdqty += line.product_uom_qty
rs.sum_dmd_qty = dmdqty
def calculate_reserved_qty(self):
for rs in self:
reservedqty = 0
for line in rs.move_lines:
reservedqty += line.reserved_availability
rs.sum_reserved_qty = reservedqty
@api.depends('sum_reserved_qty', 'sum_dmd_qty')
def calculate_reserved_per(self):
for rec in self:
if rec.sum_dmd_qty > 0:
rec.reserved_qty_per = rec.sum_reserved_qty / rec.sum_dmd_qty
这里是XML查看代码:
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="inherit_stock_picking_form_view" model="ir.ui.view">
<field name="name">Stock Picking</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_form"/>
<field name="arch" type="xml">
<xpath expr="/form/sheet/notebook" position="after">
<group>
<group>
<field name="reserved_qty_per" nolabel="0"/>
</group>
</group>
</xpath>
</field>
</record>
<record id="inherit_stock_picking_tree_view2" model="ir.ui.view">
<field name="name">Stock Picking2</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.vpicktree"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='state']" position="after">
<field name="reserved_qty_per"/>
</xpath>
</field>
</record>
</data>
</odoo>
sum
值为每条记录重新初始化并在 for 循环之外赋值,除了树视图中的最后一条记录外,计算将不起作用。这些方法是用一个记录集调用的,在表单视图中它是用一个只包含一条记录的记录集调用的,这就是它在表单视图而不是树视图中工作的原因。
要更正该问题,请将前两个方法的最后一行移动到第一个循环中。
depends装饰器缺失,尝试添加。
示例:
@api.depends("move_lines.product_uom_qty")
def calculate_dmd_qty(self):
for rs in self:
dmdqty = 0
for line in rs.move_ids_without_package:
dmdqty += line.product_uom_qty
rs.sum_dmd_qty = dmdqty
@api.depends("move_lines.reserved_availability")
def calculate_reserved_qty(self):
for rs in self:
reservedqty = 0
for line in rs.move_ids_without_package:
reservedqty += line.reserved_availability
rs.sum_reserved_qty = reservedqty
编辑:
<odoo>
<record id="view_picking_form" model="ir.ui.view">
<field name="name">view.picking.form</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_form"/>
<field name="arch" type="xml">
<xpath expr='//notebook' position="after">
<group>
<field name="reserved_qty_per"/>
</group>
</xpath>
</field>
</record>
<record id="vpicktree" model="ir.ui.view">
<field name="name">view.vpicktree</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.vpicktree"/>
<field name="arch" type="xml">
<field name="state" position="before">
<field name="reserved_qty_per"/>
</field>
</field>
</record>
</odoo>