odoo tree视图过滤数据_(原创)【odoo开发】入门第一课

    Odoo开发入门第一课,从自定义一个APP应用模块开始(假设已下载源码配置好开发环境)。学习这个知识点后帮助理解Odoo的MVC结构,对源码结构有个初步认识,更容易理解前台配置过程、选项。

效果预览:

efcd05d06f267ebe9e727d68479b09b9.png

e8d2e23245b948c6115faef05b8aa30d.png

1、创建快框架: 

        终端使用命令 odoo-bin scaffold

1$ ./odoo-bin scaffold jwerp_module ./addons/

ca2b311e4dc36fa0d0424be091d9a512.png

2、配置__manifest__.py文件:

 1# -*- coding: utf-8 -*-
2{
3    'name': "jwerp_module",
4    'summary': """ 5        Short (1 phrase/line) summary of the module's purpose, used as 6        subtitle on modules listing or apps.openerp.com""",
7    'description': """ 8        Long description of module's purpose 9    """,
10    'author': "My Company",
11    'website': "http://www.yourcompany.com",
12
13    # Categories can be used to filter modules in modules listing
14    # Check https://github.com/odoo/odoo/blob/14.0/odoo/addons/base/data/ir_module_category_data.xml
15    # for the full list
16    'category': 'Uncategorized',
17    'version': '0.1',
18
19    # any module necessary for this one to work correctly
20    # 依赖模块
21    'depends': ['base'],
22
23    # always loaded
24    'data': [
25        'security/ir.model.access.csv',
26        'views/teacher_views.xml',
27        'views/views.xml',
28        'views/templates.xml',
29    ],
30    # only loaded in demonstration mode
31    'demo': [
32        'demo/demo.xml',
33    ],
34    # 默认创建模板没有这三项
35    'installable': True,
36    'application': True,
37    'auto_install': False
38}

    然后,重启服务>应用>刷新本地模块列表

    可看到应用列表多了自定义模块图标

52f6d0b1bff61aaf432b54de7f9f7fb7.png

3、models文件夹下新建teacher_data.py

        Python类,类属性_name表示模型名称jwerp_module.teacher,以点号. 命名规则。Odoo的ORM引擎启动时会在数据库创建对应的实例对象jwerp_module_teacher,名称以下划线代替点号。

ORM引擎的fields模型字段的选项有:

    index:是否索引

    required:是否必填

    readonly:是否只读

    default: 默认值

    compute: 计算列,引用函数名

    其他暂不展开说

 1from odoo import models, fields, api
2
3class Teacher(models.Model):
4    _name = 'jwerp_module.teacher'
5    _description = "JwERP/Teacher"
6
7    name = fields.Char("名字", index=True, required = True, )
8    age = fields.Integer(string='Age')
9
10    _sql_constraints = [('name_unique', 'unique(name)', 'A Name can only have one Teacher.')]

     数据的ID列,一般无需我们定义,Odoo的ORM引擎会自动创建id列及几个内置字段。

    模型字段约束有两种方法,一种是给_sql_constraints属性赋值,会在数据表实例添加约束;

ccc4631cb6486d2a2d67c96f8cd800eb.png

    另一种就是上面说到的计算列compute对应的函数,在代码层面进行约束。

1    value = fields.Integer()
2    value2 = fields.Float(compute="_value_pc", store=True)
3    description = fields.Text()
4
5    @api.depends('value')
6    def _value_pc(self):
7        for record in self:
8            record.value2 = float(record.value) / 100

    注意通过前台的‘技术’>'模型约束' 创建的约束只保存在数据库表ir_model_constraint里,实例数据表没有修改生效。

4.定义菜单、视图、动作文件 teacher_views.xml

 1 2   3     4    "ir.ui.view" id="jwerp_module.list"> 5      "name">jwerp_module list 6      "model">jwerp_module.teacher 7      "arch" type="xml"> 8         9          "name"/>10          "age"/>11        12      13    1415    16    "ir.actions.act_window" id="jwerp_module.action_window">17      "name">教师18      19      "res_model">jwerp_module.teacher20      "view_mode">tree,form,kanban21    2223    243839    4041    "JWERP" id="jwerp_module.menu_root"/>4243    4445    "Teachers" id="jwerp_module.menu_teacher" parent="jwerp_module.menu_root"/>46    "Students" id="jwerp_module.menu_student" parent="jwerp_module.menu_root"/>4748    4950    "Teacher List" id="jwerp_module.menu_teacher_list" parent="jwerp_module.menu_teacher"51              action="jwerp_module.action_window"/>52    "Server to list" id="jwerp_module." parent="jwerp_module.menu_student"53              action="jwerp_module.action_window"/>5455  56

adction 父类有:

    ir.actions.act_window

    ir.actions.client

    ir.actions.server

    ir.actions.report

    ir.actions.act_url

"view_mode" 表示有几种视图形式,需自定义各种视图,

,,,,,

5、配置权限文件security/ir.model.access.csv

1 id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
2access_jwerp_module_teacher,jwerp_module.teacher,model_jwerp_module_teacher,base.group_user,1,1,1,1

    修改__manifest__.py文件,增加内容

1# always loaded
2'data': [
3    'security/ir.model.access.csv',
4    'views/teacher_views.xml',
5    'views/views.xml',
6    'views/templates.xml',
7]

小结:

    每次修改代码后,需重启服务,模块‘升级’。odoo的模块结构分层清晰,有view视图层、model模型层,controllers控制层,ORM则引擎无需开发人员重复写CURD。

    自定义菜单、模型、视图,其实都可以前台0代码配置,这也是odoo高可定制的方面,但前台配置的只存在数据库记录,没有源码文件,不利于知识转移。前台配置一般适用于实施人员或小功能应用。

Odoo14 免注册 体验地址

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Odootree视图可以通过以下方式进行编写: 1. 定义模型 首先,需要定义模型对象。可以使用Odoo的模型类来定义模型对象,例如: ``` from odoo import models, fields class MyModel(models.Model): _name = 'my.model' name = fields.Char('Name') description = fields.Text('Description') ``` 2. 定义tree视图 接下来,需要定义tree视图。可以使用Odoo视图类来定义tree视图,例如: ``` <odoo> <data> <record model="ir.ui.view" id="my_model_tree_view"> <field name="name">My Model Tree View</field> <field name="model">my.model</field> <field name="arch" type="xml"> <tree> <field name="name"/> <field name="description"/> </tree> </field> </record> </data> </odoo> ``` 在上面的示例中,我们定义了一个名为“my_model_tree_view”的tree视图,并指定了模型对象“my.model”。在tree中,我们定义了两个字段:“name”和“description”。 3. 注册视图 最后,需要将tree视图注册到Odoo中。可以使用Odoo的模块类来注册视图,例如: ``` from odoo import api, SUPERUSER_ID class MyModule(models.Model): _name = 'my.module' @api.model def _register_hook(self): # Register tree view self.env['ir.ui.view'].search([ ('name', '=', 'My Model Tree View'), ('model', '=', 'my.model') ]).write({ 'arch': self.env.ref('my_module.my_model_tree_view').arch }) ``` 在上面的示例中,我们在模块类中注册了tree视图。我们通过搜索现有的视图来找到我们定义的tree视图,并将其arch更新为我们定义的视图arch。 这样,我们就完成了Odootree视图的编写。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值