我在Odoo13工作,我在创建销售订单时正在计算一些税,并且这样做时,我成功地按以下方法计算了各自的税。
但是在保存我的销售订单或确认后,我的所有自定义税项都消失了,如:
这是我的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就是为什么它们消失了,但是为什么它们消失了 变成零?
答案 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
属性进行了声明。这意味着它将在保存记录时刷新值。