odoo11创建自定义模块源代码

 ODOO 官方建议模块骨架 ,

  • 在addons/<my_module_name>/下结构如下:

文件夹权限755  文件权限644    
    __openerp__.py 相关属性:
    # name  模块名字
    # summary 简短介绍
    # description 详细描述
    # author 作者
    # website 模块网站
    # category 模块分类
    # version 模块版本号
    # license 模块版本信息 默认是 AGPL-3
    # depends 模块依赖
    # data 模块必须加载的数据文件
    # demo 示例数据
    # installabel 默认为True 可安装
    # auto_install 默认是False 如果设为True 就根据依赖模块,依赖装了,这个模块就安装
    # application 默认是 False 如果设为True 就成为应用模块
    
    安装自定义模块
        服务启动配置文件 addons-path 加入自己的定义容器目录 如 myaddons
        addons-path=addons,myaddons
        更新模块服务列表,然后找到去安装
        
    模块文件夹管理    
     # data  放 demo 和 data xml
     # models 放模型定义
     # controllers http 路径控制
     # views  放网页视图和模板
     # static 放网页的资源,里面还有css, js ,img, lib 等
     #   

  • 自动定的模块tech_demo

我们在ODOO文件夹下,新增addons_demo文件夹,如addons_demo/tech_demo下结构如下:

* __init__.py 内容如下(把模型导入到应用)

from . import models

* __manifest__.py 内容如下(erp本身的配置)

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.

{
    'name': 'tech_demo',
    'version': '1.0',
    'category': 'test',
    'sequence': 8,
    'summary': '',
    'description': "",
    'website': '',
    'depends': [ ],
    'data': [
        'views/tech_student_views.xml',
        'views/tech_teacher_views.xml'
    ],
    'demo': [],
    'css': [],
    'installable': True,
    'application': True,
    'auto_install': False,
}
  • 在models文件夹下,新建tech_demo.py

*tech_demo.py 内容如下(模型)

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, tools, models
from odoo.tools.translate import _
class tech_student(models.Model):
    _name="tech.student"
    _description=""
    def _selection(self):
        team = self.env['crm.team'].sudo()._get_default_team_id(user_id=self.env.uid)
        return self._stage_find(team_id=team.id, domain=[('fold', '=', False)]).id



    @api.multi
    def _compute_attachment_number(self):
        """附件上传"""
        attachment_data = self.env['ir.attachment'].read_group([('res_model', '=', 'tech.student'), ('res_id', ' in ', self.ids)], ['res_id'], ['res_id'])
        if len(attachment_data)>0:
            attachment = dict((data['res_id'], data['res_id_count']) for data in attachment_data)
            for expense in self:
                expense.attachment_number = attachment.get(expense.id, 0)

    @api.multi
    def action_get_attachment_view(self):
        """附件上传动作视图"""
        self.ensure_one()
        res = self.env['ir.actions.act_window'].for_xml_id('base', 'action_attachment')
        if res:
            res['domain'] = [('res_model', '=', 'tech.student'), ('res_id', ' in ', self.ids)]
            res['context'] = {'default_res_model': 'tech.student', 'default_res_id': self.id}
        return res

    # 增加附件上传功能
    attachment_number = fields.Integer(compute='_compute_attachment_number', string ='附件数量')
    name = fields.Char(u'名字')
    age = fields.Integer(u'年龄')
    sex = fields.Selection([('1',u'男'),('2',u'女')], string=u'性别')
    address = fields.Char(u'住址')
    phone = fields.Char(u'电话')
    email = fields.Char(u'电子邮箱')
    desc = fields.Text(u'描述')
    document = fields.Html(u'文档')
    sequence = fields.Integer(default=0,string=u'序号')
    perc_complete = fields.Float(u'% 万年收入', (3, 2))
    # Date fields:
    date_effective = fields.Date(u'出生日期')
    date_changed = fields.Datetime(u'修改日期')
    # Other fields:
    fold = fields.Boolean(default=True, help=u"是否转正")
    image = fields.Binary(u'个人照片')
  • 在views文件夹下,新建tech_student_views.xml

<?xml version="1.0"?>
<odoo>
        <!--  tech.student views -->
        <record id="tech_student_form" model="ir.ui.view">
            <field name="name">tech.student.form</field>
            <field name="model">tech.student</field>
            <field name="arch" type="xml">
                <form string="学生信息">
                    <sheel>
                        <label for="name"></label>
                        <div class="oe_button_box" name="button_box">
                            <button name="action_get_attachment_view" class="oe_stat_button" icon="fa-book" type="object">
                                <field name="attachment_number" widget="statinfo" string="附件上传"/>
                            </button>
                        </div>
                        <group>
                                <group string="基本信息">
                                    <field name="name"/>
                                    <field name="age"/>
                                    <field name="sex"/>
                                    <field name="address"/>
                                    <field name="phone"/>
                                    <field name="email"/>
                                </group>
                                <group string="联系信息">
                                    <field name="sequence"/>
                                    <field name="perc_complete"/>
                                    <field name="date_effective"/>
                                    <field name="date_changed"/>
                                    <field name="fold"/>
                                    <field name="image"/>
                                </group>

                        </group>
                        <group  string="备注信息">
                                <field name="document"/>
                                <field name="desc" />
                            </group>
                    </sheel>
                </form>
            </field>
        </record>

        <record id="tech_student_tree" model="ir.ui.view">
            <field name="name">tech.student.tree</field>
            <field name="model">tech.student</field>
            <field name="arch" type="xml">
                <tree string="Tech Student">
                    <field name="sequence"/>
                    <field name="phone"/>
                    <field name="name"/>
                    <field name="age"/>
                    <field name="sex"/>
                    <field name="address"/>
                    <field name="email"/>
                </tree>
            </field>
        </record>

        <record id="tech_student_action" model="ir.actions.act_window">
            <field name="name">学生</field>
            <field name="res_model">tech.student</field>
            <field name="view_mode">tree,form</field>
        </record>

        <menuitem id="menu_tech" name="学校管理" />
        <menuitem id="menu_tech_stu" name="师生管理" parent="menu_tech"/>
        <menuitem id="menu_tech_student" name="学生列表" parent="menu_tech_stu" action="tech_student_action"/>
</odoo>

然后重新启动ODOO11的服务,可以查看结果

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值