2.odoo13的学习(odoo中的模型、模型类属性、字段属性等)

目录

1.什么是模型

 2.模型的定义

2.1 模型的位置

2.2 初始模型类

2.3 模型类的常用属性

2.4 模型类字段的属性参数

2.5 模型类创建好后,odoo默认创建一些字段

2.6 初始模型类结合菜单查看效果

2.6.1 菜单的定义

2.6.2 action的定义(动作)

2.6.3 查看创建的模块和进行操作以及保存创建数据

3.命名规范

3.1模型命名规范

3.2菜单命名规范

3.3视图命名规范

4.odoo修改后代码不生效的问题


1.什么是模型

        odoo通过orm来实现对数据库的操作,可以通过在odoo中定义模型,然后根据定义的模型来生成数据库中的表,并通过python中操作对象的方式,来进行对数据库的操作,大部分场景下不在需要写SQL语句,提高了数据库操作的效率以及安全性

 2.模型的定义

2.1 模型的位置

模型在创建好的模块文件里面的model类

 Odoo的一个关键组件是ORM层。该层避免了手动编写大多数SQL并提供可扩展性和安全性服务。业务系统通过继承Model类,定义成python对象,通过该对象与后台数据库进行自动化集成。

2.2 初始模型类

例如:我们建立一个考试教室的模型类

class TestRoomModel(models.Model):
    # 模型名称,类的唯一标识,其他类可以通过此字段引用本类
    _name = 'test.test_room'
    # 多模型类的描述,提高查询的友好性,为用户查看该模型的标题
    _description = 'test_room '

    name = fields.Char()
    seat_num = fields.Integer()
  •  odoo中一个模型就是一个模型类,继承models.Model
  • _name属性,它用来定义模型名称, 一般是   模块名称.模型类名称

模型类建立好之后,在Django中是要通过迁移命令完成的,在odoo中是找到该应用之后点击升级完成的,如下图

注意,没安装的点击安装后,才会出现升级的操作,然后点击升级

我们到数据库里面查找生成数据库表以及字段,如下图,里面就有我们的数字字段
默认的表名是把  _name里面的值,中的点换成了下划线

2.3 模型类的常用属性

属性解释
_name类的唯一标识,其他类可以通过此字段引用本类
_description对模型的简单描述
_order设置该模型展示时默认的排序字段
_rec_nameodoo默认使用name字段,作为数据记录的描述,可以用该字段来指定其他字段,也可以使用 name_get() 方法做为描述。
_table模型在后台存储的表名,在默认情况下odoo会将 _name 中的 . 替换为 _ 作为表名,通过该字 段可以指定。
_inherit、_inherits用于继承
_order:  例如: _order = 'create_date desc'     解释:按照创建时间倒序排列

2.4 模型类字段的属性参数

属性参数类型解释默认值
string unicode用户界面中(对用户可见)的字段标签字段名
sizeInt允许字符串的长度长度不限制
required bool若为 True,该字段不能为空,必须要么带有默认值,要么保持在创建记录时给定值。长形,在用户界面中向用户提供提示信息。False
help unicode帮助,在用户界面中向用户提供提示信息。''
indexbool请求 Odoo 对字段创建数据库索引 。False
readonlybool该字段是否为只读False
copy bool复制记录时是否应复制字段值True
default根据字段的类型任何字段都可以被赋予一个默认值。在字段定义中,添加选项 default=X,是 Python 文字值(布尔值、整数、浮点数、字符串)或采用模型并返回值的函数
可以使用自定义的函数,设置值, 装饰器api.model
class estate_property(models.Model):
    _name = 'estate.property'
    _description = '不动产模型类'

    name = fields.Char(required=True, string='名称')  # 名称
    description = fields.Text(string='描述')  # 描述
    postcode = fields.Char(string='邮政编码')  # 邮政编码
    @api.model
    def _get_time(self):
        return datetime.now() + relativedelta(months=3)
    # date_availability = fields.Date(string='可用日期', copy=False, default=datetime.now() + relativedelta(months=3))  # 可用日期
    date_availability = fields.Date(string='可用日期', copy=False, default=_get_time)  # 可用日期

2.5 模型类创建好后,odoo默认创建一些字段

列名解释类型
id模型中对一条记录的唯一标识符。ID
create_date记录的创建日期。Datetime
create_uid创建记录的用户。Many2one
write_date记录的最后修改日期。Datetime
write_uid最近修改记录的用户。Many2one
了解之后可以修改修改模型类了

2.6 初始模型类结合菜单查看效果

2.6.1 菜单的定义

菜单的位置以及在哪块编写,是在views文件夹下的views.xml中

 一个菜单的创建如下图:.

<odoo>
    <data>
        <menuitem id="test_room" name="考场"/>
        <menuitem id="test_room_manage" name="考场管理"
                  parent="test_room" action="test_room_action"/>
    </data>
</odoo>
  • 使用menuitem定义菜单
  • id为菜单的标识,被用来做层级关系
  • parent :    该二级菜单属于哪个菜单,即为菜单的父级菜单
  • action 点击菜单执行的动作,action看2.3.1

2.6.2 action的定义(动作)

<odoo>
    <data>
        <record model="ir.actions.act_window" id="test_room_action">
            <field name="name">科目管理</field>
            <field name="res_model">test.test_room</field>
            <field name="view_mode">tree,form</field>
        </record>

        <menuitem id="test_room" name="考场"/>
        <menuitem id="test_room_manage" name="考场管理"
                  parent="test_room" action="test_room_action"/>
    </data>
</odoo>
  • action一定要写在菜单的上边,因为菜单里面的action属性需要用到action。
  • 是用record标签包裹起来
  • model :   代表着这条数据要存储到数据库的位置
                    值为:ir.actions.act_window(窗口动作表)
  • id:    这个record的id,菜单可以调用,其必须在整个odoo应用中唯一
  • name: 页面操作区域的名称
    • res_model: 页面使用的模型
    • view_model:  用来指定模型的视图,如果没有定义则使用默认的视图类型,定义后只能使用定义的视图类型。比如去掉form,就代表不能使用form视图创建数据
    • tree代表列表视图、form代表表单视图

2.6.3 查看创建的模块和进行操作以及保存创建数据

菜单和action加上之后,要把模块升级一下

然后查看效果,(不用管这个会议室,这是我之前创建的)

 

创建个新数据,对应两个字段,就是模型类对应的两个字段

 

也可以进行修改编辑

3.命名规范

3.1模型命名规范

  •  如果只有一个模型,则模型名称应与模块名称相同。
  • 如果模型较多,则可将多个模型根据业务逻辑分组,每组有一个主模型。
  • 在定义模型的名称时,使用名称的单数形式,使用大驼峰的命名风格,并以‘Model’结尾。
  • 模型文件名应以主模型的名称来名称(下划线命名)。

3.2菜单命名规范

菜单的名称使用 _menu , 或是子菜单用 _menu_ 如果菜单那与模型相关,那么就放到和模型相关的视图文件中, _view.xml 如果是与模型没有绑定关系的主菜单,可提取到 _menus.xml 文件

3.3视图命名规范

主动作为 _action 。其它使用 _ 作为后缀,其中detail 为简洁地解释动作的小 写字符串。仅用于多个动作对模型进行声明时。

4.odoo修改后代码不生效的问题

在后续开发中,如果出现代码修改后不生效的情况,一定要注意以下几点:

  1. 有没有重启pycharm
  2. pycharm过期自动退出后,有没有在任务管理器中结束python进程 是否重启了项目
  3. 如果不生效的代码为model或者view,那么有没有在model的 __init__.py 或者 __manifest__.py 文件中引用
  4. 如果报错时,提示某个内容不存在,那么应检查文件的引入顺序

B站up主

单三er的个人空间_哔哩哔哩_Bilibilihttps://space.bilibili.com/419877109

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还是那个同伟伟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值