重写Odoo(三)odoo 数据库结构


简介:

数据库设置这个就没什么可说的,你没数据库,准备玩什么?

一:数据模型定义文件

根据上一篇笔记,数据库模型的配置是在新模块的models/models.py文件。

二:示例文件的解读

# -*- coding: utf-8 -*-

from odoo import models, fields, api


class crud(models.Model):
    _name = 'crud.crud'
    _description = 'crud.crud'

    name = fields.Char()
    value = fields.Integer()
    value2 = fields.Float(compute="_value_pc", store=True)
    description = fields.Text()

    @api.depends('value')
    def _value_pc(self):
        for record in self:
            record.value2 = float(record.value) / 100

第一行:utf-8编码,没啥解释的

第三行:导入models,fields,api

第六行:定义一个模型(可以理解为一个表)名字是crud,继承models.Model
第七行:_name定义了应用模块在odoo系统中的名字

第八行:_description,应用模块的描述

10-13:定义了一些字段

十五行:定义了一个计算函数,来定义value2,和store配合使用,

三:扩展模型,增加自己的字段

odoo有如下字段类型

class Boolean(Field)  #布尔
class Integer(Field)   #整型
class Float(Field)       #浮点
class Monetary(Field)  #货币?
class Char(Field)       #文本
class Text(Field)        #多行文本
class Html(Field)       #html富文本
class Date(Field)       #日期
class Datetime(Field)   #时间
class Binary(Field)       #二进制
class Image(Binary)      #图片基于二进制
class Selection(Field)    #选择
class Reference(Selection)   #基于选择

class Many2one    #关系多对一
class One2many   #关系一对多
class Many2many  #关系多对多

四:保留字段

odoo会自动创建如下字段方便管理。

id                        表主键             整型
create_date         创建时间           时间
create_uid              创建用户           多对一
write_date           最后修改时间     时间
write_uid             最后修改用户    多对一

还有自动处理会使用的保留字段

active    记录可见性         布尔
name    记录名               字符串

记录可见性,这个可以设置为False,即不显示该记录,归档,伪删除会用的。

name,在打开某条记录后,显示的记录名字,如果不设,打开后你就不知道是哪条记录了。

五:字段属性:

属性名 值类型 默认值 说明
string 字符串 字段名 视图中显示的字段标签
required 布尔 False 是否可以为空
help 字符串 视图中显示的字段帮助信息
index 布尔 False 是否建立索引  

 default:设置默认值

gender = fields.Selection(
    [("1", "男性"), ("2", "女性"), ("3", "人妖")],
    string="性别", default="1"
)
active = fields.Boolean(string="信息是否有效", default=True)

compute:计算属性

bmi是根据体重/身高*身高计算的。

class personal(models.Model):
    _name = 'crud.personal'
    _description = 'personal_info'

    name = fields.Char(string='姓名')
    height = fields.Float(string='身高(m)', help='以米为单位')
    weight = fields.Float(string='体重(kg)', help='以公斤为单位')
    bmi = fields.Float(compute='_count_bmi', store=True)

    @api.depends('height', 'weight')
    def _count_bmi(self):
        for record in self:
            record.bmi = float(record.weight) / (record.height * record.height)

 

原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/273375.html

(0)
上一篇 2022年7月10日
下一篇 2022年7月10日

相关推荐

发表回复

登录后才能评论