Odoo-----计算字段、depnds,onchange 机制、模型约束
1 计算字段和默认值问题
字段通过调用模型的方法的实时计算获得,一般都是 compute 属性为主的方法,这个计算方法通过计算self每条记录设置的的值,self 是一个有记录的有序集合,支持python集合操作len(self),iter(self),迭代过程逐个提交self记录,每个记录都是记录本身都是大小为1集合,可以通过点号进行访问;
1.1 通过依赖值 通过deponds(' ')
from odoo import models, fields, api
class ComputedModel(models.Model):
_name = 'test.computed'
name = fields.Char(compute='_compute_name')
value = fields.Integer()
@api.depends('value')
def _compute_name(self):
for record in self:
record.name = "Record with value %s" % record.value
1.2 默认值 给任何字段给出默认值,default=x
default= lambda self: self.env.user
self.env 对象给出访问的参数和其他有用的信息
self.env.cr 数据库游标对象,通过用于查询数据库
self.env.uid 是当前用户的数据库的id
self.env.user 是当前用户记录
self.env.ref(xml_id)返回xml_id对应的记录
self .env[model_name]返回给定模型的实例
name = fields.Char(default="Unknown")
user_id = fields.Many2one('res.users', default=lambda self: self.env.user)
1.2 onchange机制
不需要数据库保存任何内容,就可以更新新表单使用onchange()
# onchange handler
@api.onchange('amount', 'unit_price')
def _onchange_price(self):
# set auto-changing field
self.price = self.amount * self.unit_price
# Can optionally return a warning and domains
return {
'warning': {
'title': "Something bad happened",
'message': "It was very bad indeed",
}
1.3 模型约束
constrains('model_name')
from odoo.exceptions import ValidationError
@api.constrains('age')
def _check_something(self):
for record in self:
if record.age > 20:
raise ValidationError("Your record is too old: %s" % record.age)
# all records passed the test, don't return anything
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示