1. 程式人生 > >(61) 總結字段更新方法

(61) 總結字段更新方法

put margin 就會 position con ear == app 訂單

前言:

當我們建立一個記錄後,隨著後面的流程,這個記錄有些字段是要更改的

采用onchange更改

@api.onchange(‘sale_id‘)
def onchange_sale_id(self
):
if self
.sale_id:
self.sale_order_site = self
.sale_id.sale_order_site

sale_id = fields.Many2one(
‘sale.order‘, ‘Sale Order‘
,
domain=lambda self: [(‘user_id‘, ‘=‘, self.env.uid),(

‘state‘,‘!=‘,‘cancel‘)],
)

技術分享圖片

當我們改變銷售訂單,對應的網單號就會跟著變

采用compute 更改

@api.one
@api.depends(‘amount‘,‘back_amount‘,‘currency_id‘,‘payment_date‘
)
def _get_amount_net(self
):
amount_net =
0.0
currency = self.env[‘res.currency‘].search([(‘name‘, ‘=‘, ‘USD‘)], limit=1
)
if
currency:
amount_net_orig =
self.amount - self
.back_amount
if
amount_net_orig:
if currency.id != self
.currency_id.id:
from_currency =
self.currency_id.with_context(date=self
.payment_date)
amount_net += from_currency.compute(amount_net_orig, currency)
else
:
amount_net = amount_net_orig
self
.amount_net = amount_net

amount_net = fields.Float(compute=‘_get_amount_net‘, string=‘Amount Net‘,digits_compute=dp.get_precision(‘Account‘),store=True)

這樣就會根據 ‘amount‘,‘back_amount‘,‘currency_id‘,‘payment_date‘ 的變化來計算

amount_net 的值,這裏要註意,要改變的字段,一定要調用這個計算方法 如:

compute=‘_get_amount_net‘, 若不加在指定的字段上,你在方法中寫self.amount_net = xxx 這樣是不會保存在數據庫中的

采用其它操作時更改

比如當我取消訂單時 要改變記錄一些字段的值

if order.apply_type ==‘cancel‘:
yj_robot_id =
self.env.ref(‘base.user_yj_robot‘
).id
order.sudo(yj_robot_id).action_cancel()
if
order.agreed_apply_users_type:
order.sudo(yj_robot_id).agreed_apply_users_type =
None
if
order.payment_state:
order.sudo(yj_robot_id).payment_state =
‘cancel‘

技術分享圖片

註意事項:

權限很麻煩 ,有時倉庫在出貨,要改變銷售訂單的出貨狀態,這要求倉庫人員有 寫的權限

但我們又想,給他們,這時就在代碼中臨時給一個高權限的用戶操作 采用 sudo()方法來操作

比如我上面

order.sudo(yj_robot_id).payment_state = ‘cancel‘

yj_robot_id 這是我自己建立的一個高權限用戶,專門用來處理少權限的操作

(61) 總結字段更新方法