odoo11.0 model介绍

前面在模块的简单开发中已经大概知道了数据模块的一些基本创建。每当我们用python去编写一个数据模块的时候,一旦去安装这个模块,因为orm映射的关系,qsql会去自动帮我们创建对应的一个模型名称的数据库表。

  • default

    任何字段都可以被赋予默认值.默认值可以是布尔值、整数值、浮点数、字符串、函数

isOpen = fields.Boolean(default=False)
  • compute

    用来处理那些需要根据某些外界因素来实时计算的字段值。如果用这个compute修饰的字段,则不是直接从数据库检索出来的值,而是通过调用模型的方法实时计算出来的。这一点必须记住

import random
from odoo import models, fields, api

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))
  • @api.depends()

    计算字段的值通常取决于计算记录上其他字段的值,使用depends修饰器用可以在依懒字段修改情况下,被动的跟着修改。

from odoo import models, fields, api

class ComputedModel(models.Model):
    _name = 'test.computed'

    name = fields.Char(compute='_compute_name')
    value = fields.Integer()
    # 传递一个字段的名称,表示name字段值依赖value字段(可以多个字段名逗号分开)
    @api.depends('value')
    def _compute_name(self):
        for record in self:
            record.name = "Record with value %s" % record.value
  • self.env

    该对象还挺有用的,能获取很多有用的信息

print(self.env.cr) # 数据库游标对象,它用于查询数据库
print(self.env.uid) # 当前用户的数据库id
print(self.env.user) # 当前用户的记录
print(self.env.context) # 上下文字典
print(self.env.ref) # xml id对应的记录
print(self.env['test.computed']) # 返回给定模型的实例
  • @api.onchange()

    只要用户在字段中填写了值,就可以更新表单,而无需将任何内容保存到数据库中。

# price、amount、unit_price都是随便举例的model中的fields声明的字段
price = fields.Float(compute='_onchange_price')
@api.onchange('amount', 'unit_price')
def _onchange_price(self):
    # 设置自动更改字段
    self.price = self.amount * self.unit_price
    # 可以选择返回一些信息
    return {
        'warning': {
            'title': "Something bad happened",
            'message': "It was very bad indeed",
        }
    }
  • @api.constrains

    约束,用来对某些字段值进行约束

results matching ""

    No results matching ""