2

我在 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>

注意:确认我的订单或保存后,我的自定义字段值变为 0,这就是它们消失的原因,但为什么它们变为零?

4

2 回答 2

1

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

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字段也遵循相同的行为,因此您也必须在字段中使用force_save属性invisible

于 2020-01-04T11:42:03.703 回答
0

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

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

之后,你就会知道问题出在哪里。

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

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

笔记:

我没有看到任何税收领域的计算,你已经用readonly=True属性声明了它。这意味着它将在记录保存时刷新值。

于 2020-01-03T11:29:46.100 回答