首页 > 编程知识 正文

定义字段的特殊属性不包括,varbin类型字段

时间:2023-05-06 18:48:09 阅读:142036 作者:3984

点击跳转进入免费课程(课程持续更新中…)

课件地址:点击跳转

课程环境地址:跳转帐户秘密:单击testuser

gitee代码地址:点击跳转(分支learning_odoo12 ) ) )。

微信公众号二维码:

一些类型的Basic fields odoo定义字段:

class odoo.fields.Char (定义str类型的字段class odoo.fields.Boolean )定义布尔类型的字段class odoo.fields.Integer定义数值类型的字段class odoo.fields.Integer 字段class odoo.fields.Text ()用于定义str类型的字段(长文本(class odoo.fields.Selection ) )用于定义枚举类型的字段class odoo.fields htmlclection ) )为日期class odoo.fields.Datetime (日期时间class odoo.fields.Many2one ) )为class odoo.fields.One2many ) s classodoo.fields.field (string=,**kwargs )字段描述符中的同事包含字段定义,用于访问和分配记录上的相应字段。 实例化字段时,可以设置以下属性:

参数字符串字段的显示名称; 如果未设置,则字段的大写帮助字段提示内容readonly字段是否为只读,布尔类型默认为false required字段是否为必填字段by default False (按默认)索引- )字段是否对数据库编制索引,不影响非存储字段使用属性通常为“‘readonly”、“‘required”、“‘invisible”。 请注意,states的密钥必须处于已设置state的可能状态。 例如,name=fields.char (readonly=false,States={'done':((readonly ',True ) } )。 例如,sign up _ token=fields.char (copy=false,groups='base.group_erp_manager ' ) -对于复制当前记录,当前字段ORM可以自动重命名在迁移期间group _ operator (str )- read_group (读) )在此字段中分组时使用的聚合函数。 支持的聚合函数包括array_agg : values、including nulls、 concatenatedintoanarraycount : number of rows count _ distinct : numberofdistinctrowsbool _ and 3360 trueifallvaluesaretretrue ore leastonevalueistrue,otherwisefalsemax 3360 maximumvalueofallvaluesmin : minimumvalueofallvaluesavg : the average (arithmethmed

计算字段是可以通过函数动态计算的字段值

这样的定义可以通过compute属性来实现

参数计算在指定方法名称(string ) inverse -(反参数search -)字段中实现搜索的方法的名称store -(数据库)字段存储在布尔中compute _ sudo (LDS ) -改进字段是否使用超级用户计算,以避免compute,inversealse影响没有存储数据库的字段

upper=fields.char (compute=' _ compute _ upper ',inverse='_inverse_upper ',search=' _ search _ u u u upper

e')def _compute_upper(self): for rec in self: rec.upper = rec.name.upper() if rec.name else Falsedef _inverse_upper(self): for rec in self: rec.name = rec.upper.lower() if rec.upper else Falsedef _search_upper(self, operator, value): if operator == 'like': operator = 'ilike' return [('name', operator, value)]

默认情况不带inverse参数下计算字段是只读的,如果需要在计算字段上进行手动输入,可以通过给出反函数来完成。因此,当字段被写入/创建时,它会触发对修饰函数的调用。它反转计算并设置相关字段。Invserse 通俗得讲,其compute的相反设置,通过设置 inverse,来达到为该字段赋值的目的。设置了 inverse 这个,字段就可以在前端直接编辑,赋值就是通过这个 inverse 设置的方法。

默认情况下,计算字段不会存储到数据库中,而是即时计算。可以通过设置属性store=True将字段存储到数据库中。存储字段的优点是,该字段的搜索由数据库本身完成。缺点是,字段重新计算时,需要数据库更新。

因此,不能正常搜索未存储在数据库中的计算字段,需要使用search,必须显式定义搜索函数。在对模型进行实际搜索之前,在处理域时会调用搜索方法。 它必须返回一个等效于以下条件的域:字段运算符值

关系字段 Related fields

关系字段通过related属性来设置,其值为模型外键关联的字段。关系字段默认也不存储数据库。
使用格式:

user_id = fields.many2one('res.users')email = field.char(related='user_id.email')

默认情况下,相关字段的值不存储到数据库中。添加属性store=True以使其存储,就像计算字段一样。修改相关性后,会自动重新计算相关字段。

模型继承时字段的增量处理 Incremental definition
字段定义做为模型类的一个属性。如果对模型进行扩展,在子类中可以看到并使用父类所定义的属性。如果子类定义字段名称相同则替换父类中的字段

字段被定义为模型类的类属性。如果扩展了模型(请参阅参考资料Model),可以通过在子类上重新定义具有相同名称和相同类型的字段来扩展字段定义。在这种情况下,字段的属性取自父类,并被子类中给定的属性覆盖。
例如:

class First(models.Model): _name = 'foo' state = fields.Selection([...], required=True)class Second(models.Model): _inherit = 'foo' state = fields.Selection(help="Blah blah blah") 时间日期类型字段

日期是常用而且重要的字段,
日期字段(fields.Date)存储在数据库中的字符串格式为 年-月-日(YYYY-MM-DD)
日期时间字段(fields.Datetime)存储在数据库中的字符串格式为 年-月-日 时:分:秒(YYYY-MM-DD HH:MM:SS)
日期类型字段的常见操作,

在赋值时如果不确定得到的数据是 日期类型还是日期时间类型,可以使用 to_date() or to_datetime() 进行处理
例如:

fields.Date.to_date(self._context.get('date_from'))

Date和Datetime的一些其他操作可以通过封装好的工具odoo.tools.date_utils来实现

class odoo.fields.Date(string=, kwargs) 类型下字段的一些处理方法

static add(*args, **kwargs)static context_today(timestamp=None)static end_of(granularity)static start_of(granularity)static subtract(*args, **kwargs)static to_date()static to_string()static today()

**class odoo.fields.Datetime(string=, kwargs) 类型下字段的一些处理方法

static add(*args, **kwargs)static context_timestamp(timestamp)static end_of(granularity)static now()static start_of(granularity)static subtract(*args, **kwargs)static to_datetime()static to_string()static today() Relational fields

class odoo.fields.Many2one(comodel_name=<object object>, string=<object object>, **kwargs)
值可以为空或者是单个记录集(数据库存储的是记录集的id(type int))

Parameterscomodel_name – 目标模型的名称 (string)domain – 目标模型的筛选条件域context – 处理该字段时在客户端使用的可选上下文(dictionary)ondelete – 删除引用记录时的操作;可能的值是:'set null','restrict','cascade'auto_join – 搜索该字段时是否生成JOIN(默认为boolean False)delegate – set it to True to make fields of the target model accessible from the current model (corresponds to _inherits)

其中comodel_name参数是必填,其他参数可选
使用格式如下:

class A(models.Model):_name='a.table'b_id = fields.Many2one('b.table')class B(models.Model):_name='b.table'

class odoo.fields.One2many(comodel_name=<object object>, inverse_name=<object object>, string=<object object>, **kwargs)
一对多,comodel_name,inverse_name参数为必填项,其他参数可选

Parameterscomodel_name – 目标模型名称 (string)inverse_name – comodel_name 目标模型对应Many2one字段名称(string)domain –目标模型的筛选条件域 (domain or string)context – 处理该字段时在客户端使用的可选上下文(dictionary)auto_join – whether JOINs are generated upon search through that field (boolean, by default False)limit – 读取时,可选最大显示数量 (integer)

使用格式如下:

class A(models.Model):_name='a.table'b_id = fields.One2many('b.table', 'a_id')class B(models.Model):_name='b.table'a_id = field.Many2one('a.table')

class odoo.fields.Many2many(comodel_name=<object object>, relation=<object object>, column1=<object object>, column2=<object object>, string=, **kwargs)
多对多,comodel_name参数必填,其他参数可选,relation,column1,column2如果未设置odoo会自动命名

Parameterscomodel_name –目标模型的名称(字符串)relation – 目标模型和当前模型的关联表 (string)column1 – 关联表中当前模型的记录字段名 (string)column2 – 关联表中目标模型的记录字段名称 (string)domain – 目标模型的筛选条件域 (domain or string)context – 处理该字段时在客户端使用的可选上下文(dictionary)limit – 读取时,可选最大显示数量(integer)

使用格式如下:

class A(models.Model):_name='a.table'b_ids = fields.Many2many('b.table', relation='a_b_table_rel', column1='a_table_id', column2='b_table_id')class B(models.Model):_name='b.table'

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。