为什么价值观正在消失?

Why values are disappearing?

我在 Odoo13 工作,我在创建销售订单时计算了一些税费,并且在执行此操作时我成功地计算了我各自的税费,如下所示。

但是在保存我的销售订单或确认它之后,我所有的自定义税字段都消失了,如:

这是我的Python文件代码:

class SaleOrder(models.Model):
_inherit = ['sale.order']

federal_tax = fields.Float('Federal Tax', readonly=True)
state_tax = fields.Float('State Tax', readonly=True)
county_tax = fields.Float('County Tax', readonly=True)
city_tax = fields.Float('City Tax', readonly=True)
unincorporated_tax = fields.Float('Unincorporated Tax', store=True, readonly=True)

这是我的 XML 文件:

<xpath expr="/form/sheet/notebook/page/group/group/field[@name='amount_untaxed']" position="after">
    <field name="federal_tax" attrs="{'invisible':[('federal_tax','==', 0.00)]}"/>
    <field name="state_tax" attrs="{'invisible':[('state_tax','==', 0.00)]}"/>
    <field name="county_tax" attrs="{'invisible':[('county_tax','==', 0.00)]}"/>
    <field name="city_tax" attrs="{'invisible':[('city_tax','==', 0.00)]}"/>
    <field name="unincorporated_tax" attrs="{'invisible':[('unincorporated_tax','==', 0.00)]}"/>
</xpath>

Note: After confirming my order or by saving it my custom fields value turn to 0 that is why they are disappearing but why they are turning to zero?

从 xml 字段声明中删除 invisible 属性。

重启Odoo服务器,升级模块。并验证您的输出。

之后你就知道问题出在哪里了

如果您想隐藏税收,请执行以下操作。

attrs="{'invisible': [('federal_tax','=', 0.00)]}"

注意:

我没有看到任何税项计算,而您已使用 readonly=True 属性声明了它。这意味着它会在记录保存时刷新值。

您可以将只读字段属性放在视图而不是模型上,例如:

class SaleOrder(models.Model):
_inherit = ['sale.order']

    federal_tax = fields.Float('Federal Tax',) 
    state_tax = fields.Float('State Tax',) 
    county_tax = fields.Float('County Tax',) 
    city_tax = fields.Float('City Tax',) 
    unincorporated_tax = fields.Float('Unincorporated Tax',)


<xpath expr="/form/sheet/notebook/page/group/group/field[@name='amount_untaxed']" position="after">
    <field name="federal_tax" attrs="{'invisible':[('federal_tax','==', 0.00)]}" readonly="True"/>
    <field name="state_tax" attrs="{'invisible':[('state_tax','==', 0.00)]}" readonly="True"/>
    <field name="county_tax" attrs="{'invisible':[('county_tax','==', 0.00)]}" readonly="True"/>
    <field name="city_tax" attrs="{'invisible':[('city_tax','==', 0.00)]}" readonly="True"/>
    <field name="unincorporated_tax" attrs="{'invisible':[('unincorporated_tax','==', 0.00)]}" readonly="True"/> 
</xpath>

现在的主要问题是,为什么您的数据没有被存储,这是因为在模型定义中您将字段定义为只读,默认情况下 Odoo 不会存储来自 readonly 字段的表单数据属性设置为 True。我假设您正在从 onchange 函数计算表单视图上的那些只读字段,因此数据只是即时计算,但尚未保存在数据库中,但由于这是只读的,Odoo 忽略了这些字段值,因此你总是得到 ) 即使在按下保存之后。您可以使用 force_save 属性覆盖 Odoo 默认行为,即使只读,它也会覆盖 Odoo 默认表单行为以提交字段值。

<xpath expr="/form/sheet/notebook/page/group/group/field[@name='amount_untaxed']" position="after">
    <field name="federal_tax" attrs="{'invisible':[('federal_tax','==', 0.00)]}" readonly="True" force_save="1"/>
    <field name="state_tax" attrs="{'invisible':[('state_tax','==', 0.00)]}" readonly="True" force_save="1"/>
    <field name="county_tax" attrs="{'invisible':[('county_tax','==', 0.00)]}" readonly="True" force_save="1"/>
    <field name="city_tax" attrs="{'invisible':[('city_tax','==', 0.00)]}" readonly="True" force_save="1"/>
    <field name="unincorporated_tax" attrs="{'invisible':[('unincorporated_tax','==', 0.00)]}" readonly="True" force_save="1"/> 
</xpath>

Odoo 也对 invisible 字段遵循相同的行为,因此您还必须在 invisible 字段中使用 force_save 属性。