为什么价值观消失了?

时间:2020-01-03 10:31:51

标签: odoo odoo-13

我在Odoo13工作,我在创建销售订单时正在计算一些税,并且这样做时,我成功地按以下方法计算了各自的税。

enter image description here

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

enter image description here

这是我的Python文件代码:

Video

这是我的XML文件:

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)

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

2 个答案:

答案 0 :(得分: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属性。

答案 1 :(得分:0)

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

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

然后,您将知道问题出在哪里。

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

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

注意:

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