odoo 計算字段和默認值


計算字段

如下

import random
from odoo import models, fields
​
class ComputedModel(models.Model):
    _name = 'test.computed'
​
    name = fields.Char(compute='_compute_name')
​
    @api.multi
    def _compute_name(self):
        for record in self:
            record.name = str(random.randint(1, 1e6))

 

當每次調用rec.name時,都會調用compute方法來計算字段的值

self是一個record集合(recordset),可以for循環出里面的單個記錄,單個記錄可以用 . 來訪問字段

recordset還支持+號操作

依賴計算

 1 from odoo import models, fields, api
 2  3 class ComputedModel(models.Model):
 4     _name = 'test.computed'
 5     name = fields.Char(compute='_compute_name')
 6     value = fields.Integer()
 7  8     @api.depends('value')
 9     def _compute_name(self):
10         for record in self:
11             record.name = "Record with value %s" % self.value

 

通過@api.depends('value') 當 value值改變時會自動重新計算name, 並顯示在界面上

練習

添加課程小節的上課人數百分比,並用一個進度條顯示

models

1 taken_seats = fields.Float(string="Taken seats", compute='_taken_seats')
2 3 @api.depends('seats', 'attendee_ids')
4 def _taken_seats(self):
5     for r in self:
6         if not r.seats:
7             r.taken_seats = 0.0
8         else:
9             r.taken_seats = 100.0 * len(r.attendee_ids) / r.seats

 

xml

課時列表視圖和表單視圖添加

<field name="taken_seats" widget="progressbar"/>

 

默認值

通過default=來設置字段的默認值

name = fields.Char(default="Unknown")
user_id = fields.Many2one('res.users', default=lambda self: self.env.user)

 

self.env使用方法

self.env.cr or self.cr 數據庫指針 self.env.uid or self.uid 當前請求用戶id self.env.user 當前請求用戶記錄 可以訪問self.env.user.name 等 self.env.context or self._context 當前上下文 self.env.ref(xml_id) 通過xml_id訪問某個記錄 xml_id對應ir_model_data的name字段 self.env[model_name] 返回某個model class對象


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM