zoukankan      html  css  js  c++  java
  • odoo12 修行基础篇之 添加菜单和按钮 (三)

    这一篇耽搁了好久啊...

    公司让我去做Java项目了,写了一堆springboot、vue的文章。

    还好最近有点时间,又开始了odoo12项目维护,争取能把这一系列完成吧。时间拖得有点长,着实有点生疏了。

    长话短说,开始吧。

    这回我们搞一个客户投诉模块,演示一下,如何添加按钮。

    在models目录新建文件my_customer_complain.py,在init.py中引入。

     1 # -*- coding:utf-8 -*-
     2 
     3 from odoo import fields, models
     4 
     5 
     6 class MyCustomerComplain(models.Model):
     7     _name = "my.customer.complain"
     8     _description = '客户投诉'
     9 
    10     # 客户
    11     customer_id = fields.Many2one(
    12         'res.partner', string='客户',
    13         domain=[('customer', '=', True), ('parent_id', '=', False)]
    14     )
    15 
    16     # 供应商
    17     supplier_id = fields.Many2one(
    18         'res.partner', string='供应商',
    19         domain=[('supplier', '=', True), ('parent_id', '=', False)]
    20     )
    21 
    22     # 销售订单
    23     order_id = fields.Many2one(
    24         'sale.order', string='销售订单',
    25         domain=[('state', '=', 'sale')]
    26     )
    27 
    28     # 投诉内容
    29     complains = fields.Text(string='投诉内容')

    这里在定义Many2one字段时,用了domain属性。Many2one字段只会显示符合字段内容的记录。其实就相当于定义了到数据库查询时的筛选条件,因此,domain中使用的字段必须在对应的引用表中存在。

    在views目录中新建my_customer_complain.xml文件,注意在__manifest__.py中引入。

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <odoo>
     3 
     4     <!--在销售报告栏增加客户投诉按钮-->
     5     <act_window id="action_my_customer_complaint"
     6                 name="客户投诉页"
     7                 res_model="my.customer.complain"
     8     />
     9     <menuitem
    10             id="menu_my_customer_complaint"
    11             name="客户投诉"
    12             action="action_my_customer_complaint"
    13             parent="sale.menu_sale_report"
    14             sequence="5"
    15     />
    16 
    17 </odoo>

    <act_window/>:

      id: 定义标签的唯一标识,不能重复(下面就不说了,一个意思)

      name: 点击按钮进入列表页面显示的标题

      res_model: 对应的model类名(_name属性)

    <menuitem/>:

      name: 按钮名称

      action: 定义的act_window对应的id

      parent: 按钮的位置(下面再说下,如何获取)

      sequence: 顺序,越大越靠后

    如何查看按钮位置:

      我是google浏览器。在要放置的按钮上点击右键,找到最下面的检查选项,在弹出的内容中,找到data-menu-xmlid选项的值,就是parent中要填的内容。

     这个时候升级一下模块,你会发现,按钮呢,竟然没有...

    这个坑当时坑了我好长时间。

    其实就是权限问题。

    找到security中的ir.model.access.csv文件,没有的话就新建。

    在__manifest__.py的data标签中引入security/ir.model.access.csv

     在文件中增加以下内容:

    id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
    access_my_customer_complain,my.customer.complain,model_my_customer_complain,,1,1,1,1

    第一行是标题,第二行开始才是定义的内容,用逗号分隔

    id:就是唯一标识,可以使用access_模块名_组名_权限的命名方式来唯一标记。

    name: 可以重复,但不建议

    model_id: 必须与模块名对应一致,格式是model_(模块名,点用下划线代替)

    group_id: 组名,不填代表所有,可以指定权限组,这个以后再说

    后面四个分别为读、写、创建、删除权限,1代表有权限,0代表没有

    这个时候再升级以下,发现按钮出来了。

     

    点击创建一个单子试试。

    我们在form页面中再加一个按钮,目前没有什么作用。

    在my_customer_complain.xml文件中定义form表单,在form标签中增加header标签,并在其中定义按钮button。

    <!--form表单-->
    <record id="view_my_customer_complain" model="ir.ui.view">
        <field name="name">view.my.customer.complain</field>
        <field name="model">my.customer.complain</field>
        <field name="arch" type="xml">
            <form string="Customer Complain">
                <header>
                    <button name="action_cancel" string="取消" type="object" confirm="确认取消?"/>
                </header>
                <sheet>
                    <group name="top">
                        <group name="top_left">
                            <field name="supplier_id"/>
                        </group>
                        <group name="top_right">
                            <field name="customer_id"/>
                            <field name="order_id"/>
                        </group>
                    </group>
                    <group name="body">
                        <field name="complains"/>
                    </group>
                </sheet>
            </form>
        </field>
    </record>

    <button/>:

      type:这里填object表示点击按钮用来调用python的方法,调用的form对应的类中的方法。

      name: 表示要调用的方法名。

      string: 就是按钮显示的名字。

      confirm: 表示按钮点击后进行弹框提示,值是要提示的内容。

      还有很多属性,后面有机会再介绍,也可自行学习下。

    在my_customer_complain.py文件中加入按钮定义的方法,方法名与button中的name属性一致。

    @api.multi
    def action_cancel(self):
        print(self)

    点击后弹出提示框:

    点击确认按钮,可以看到打印的self就是对应的记录。

    可以对记录进行操作了。

    my.customer.complain(1,)

    按钮就简单介绍到这吧,下一篇我们介绍下工作流的添加。

    项目git地址:https://github.com/SamNicole1809/odoo12_my_pro,带目录

  • 相关阅读:
    SegmentFault 巨献 1024 程序猿游戏「红岸的呼唤」第二天任务攻略
    POJ 2263 Heavy Cargo(ZOJ 1952)
    EEPlat 主子表和对象引用配置实例
    tornado websocket
    android android:duplicateParentState=&quot;true&quot; &quot;false&quot;
    掌握4个有效的数据分析要点,切实解决用户痛点
    掌握4个有效的数据分析要点,切实解决用户痛点
    没有基础,如何成为数据分析师?
    没有基础,如何成为数据分析师?
    数据的无量纲化处理和标准化处理的区别是什么
  • 原文地址:https://www.cnblogs.com/SamNicole1809/p/13672382.html
Copyright © 2011-2022 走看看