【odoo二次开发】ORM框架(一、Model属性)

1.基础文件及目录结构

在认识odoo ORM框架前,先介绍一下odoo中模块目录结构。


data:存放模块预制数据
i18n:存放国际化文件
models:存放模型等PY代码
security:存放权限文件
views:存放视图文件
__manifest__.py:该文件用于声明该模块,并指定一些模块元数据(odoo8时该文件为__openerp__.py)。

 

# -*- coding: utf-8 -*-
{
    # name:模块名称
    'name': " test",

    # description:模块描述
    'description': """
        自定义模块
    """,

    # author:模块作者(XXX公司或张三)
    'author': "Hu",

    # website:作者或公司网址
    'website': "http://weibo.com/hcw1202",

    # category:模块分类
    'category': "test",

    # version:模块版本
    'version': "版本",

    # depends:所依赖其他模块
    'depends': ["base","stock","sale"],

    # 模块安装时加载
    'data': [
        'security/权限文件.csv',
        'data/预制数据.xml',
        'views/视图文件.xml',
    ],

    # 创建数据库时勾选Load demonstration data后安装该模块加载演示数据
    'demo': [
       'data/演示数据.xml',
],
}

2.型号属性

在/模型添加下test.py文件

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

from odoo import models, api, fields, _

class Test(models.Model):
    # 模型唯一标识(对应数据表为product_manage_product)
    _name = 'product_manage.product'
    # 数据显示名称,如设置则返回其指定的字段值
    _rec_name = 'test_field'
    # 字段
    test_field = fields.Char(string="字段名称")

model属性详解::类型
_name唯一标识,类非继承父类时必须指定。
_rec_name:数据显示名称,如设置则返回其指定的字段值,不设置默认显示字段为name的字段值,如无名字段则显示“模块名,ID”;详见BaseModel.name_get方法。
_log_access:是否自动增加日志字段(create_uidcreate_datewrite_uidwrite_date)默认为真。
_auto:是否创建数据库对象默认为真,详见BaseModel._auto_init方法。
_table:数据库对象名称缺。省时数据库对象名称与_name指定值相同(.替换为下划线)
_sequence。:数据库id字段的序列。默认自动创建序列。
_order:数据显示排序。所指定值为模型字段,按指定字段和方式排序结果集。

例:_order =“create_date desc”:根据创建时间降序排列。可指定多个字段。
不指定desc默认升序排列;不指定_order默认id升序排列。

_constraints:自定义约束条件模型创建/编辑数据时触发,约束未通过弹出错误提示,拒绝创建/编辑。

格式:: _constraints = [(method, 'error message', [field1, ...]), ...]
method检查方法。返回True | False
error message:不符合检查条件时(方法返回False)弹出的错误信息
[field1, ...]:字段名列表,这些字段的值会出现在错误消息中。

_sql_constraints:数据库约束。

例:_sql_constraints = [ ('number_uniq', 'unique(number, code)', 'error message') ]
会在数据库添加约束:
CONSTRAINT number_uniq UNIQUE(number, code)

_inherit。:单一继承值为所继承父类_name标识如子类不定义_name属性,则在父类中增加该子类下的字段或方法,不创建新对象;如子类定义_name属性,则创建新对象,新对象拥有父类所有的字段或方法,父类不受影响。

格式:_inherit = '父类 _name'

_inherits:多重继承子类通过关联字段与父类关联,子类不拥有父类的字段或方法,但是可以直接操作父类的字段或方法。

格式:_inherits = {'父类 _name': '关联字段'}

3.字段属性

基础类型

Char:字符型,使用尺寸参数定义字符串长度。
Text:文本型,无长度限制。
Boolean:布尔型(真,假)
Interger:整型
Float:浮点型,使用数字参数定义整数部分和小数部分位数如digits=(10,6)
Datetime:日期时间型
Date:日期型
Binary:二进制型
selection:下拉框字段。

例:state = fields.Selection([('draft', 'Draft'),('confirm', 'Confirmed'),('cancel', 'Cancelled')], string='Status')

Html:可设置字体格式,样式,可添加图片,链接等内容效果如下:

截于odoo自带项目管理模块

关系类型

One2many:一对多关系。

定义:otm = fields.One2many("关联对象 _name", "关联字段",string="字段显示名",...
例:analytic_line_ids = fields.One2many('account.analytic.line', 'move_id', string='Analytic lines')"

Many2one

定义:mto = fields.Many2one("关联对象 _name", string="字段显示名",...
可选参数:ondelete,可选值为'级联'和'空',缺省为空表示一个端删除时多端是否级联删除。

Many2many

定义:mtm = fields.Many2many("关联对象 _name", "关联表/中间表","关联字段1","关联字段2",string="字段显示名",...)
其中,关联字段,关联表/中间表可不填,中间表缺省为:表1_表2_rel
例:partner_id= fields.Many2many("res.partner", string="字段显示名",...)"

复杂类型

参数

readonly:是否只读,缺省值False。:是
required必填填,缺省值Falsse。:
string字段显示名,任意字符串。
default:字段默认值
domain:域条件,缺省值[]。在关系型字段中,domain用于过滤关联表中数据。
help:字段描述,鼠标滑过时提示。
store:是否存储于数据库。结合计算和相关使用。

例:sale_order = fields.One2many("sale.order", "contract_id",string="销售订单", domain=[('state','=','sale')])

compute:字段值由函数计算,该字段可不储存于数据库。

例:amount = fields.Float(string="金额总计", compute=‘_compute_amount’,store=True)
_compute_amount为计算函数。

related:字段值引用关联表中某字段。

以下代码表示:company_id引用hr.payroll.advicecompany_id

advice_id = fields.Many2one('hr.payroll.advice', string='Bank Advice')
company_id = fields.Many2one('res.company', related='advice_id.company_id', string='Company', store=True)

4.最后

以上即是模型的主要属性,下一节会介绍型号中常用的方法。

 

### 回答1: odoo零基础二次开发必备精讲课是一门面向没有Odoo开发经验的学员的课程。该课程旨在帮助学员全面掌握Odoo二次开发的技能和知识。 首先,课程将逐步介绍Odoo的基本概念和架构。学员将学习到关于模型、视图和控制器的基本知识,以及Odoo的数据库结构和模块之间的关系。 其次,课程将引导学员使用Python编程语言来进行Odoo二次开发。学员将学习到Python的基本语法和常用库的使用,以便能够编写和调试Odoo的模块代码。 接下来,课程将重点介绍Odoo的模块开发和扩展技术。学员将学习到如何创建新的模块、定义模型和视图,并使用控制器处理用户请求。学员还将学习到如何使用OdooORM(对象关系映射)来操作数据库,并实现模块之间的数据交互。 另外,课程还将涵盖Odoo的前端开发技术。学员将学习到如何使用XML语言来定义模块的视图和报表,以及如何使用CSS和JavaScript来美化和增强用户界面。学员还将学习到如何使用Odoo的Web框架来开发和定制网页端应用。 最后,课程将提供实际项目案例和练习,以帮助学员巩固所学知识并提升实际开发能力。学员将有机会参与到真实的项目中,与其他开发人员一起合作,解决实际的业务问题。 总之,Odoo零基础二次开发必备精讲课将以系统化和实践性为主线,帮助学员从零开始,逐步掌握Odoo二次开发的核心技能和方法。无论是想要成为Odoo开发者,还是想要在工作中应用Odoo进行定制化开发的人士,这门课程都是非常适合的选择。 ### 回答2: Odoo是一款强大的开源企业资源计划(ERP)系统,具有丰富的功能和灵活的架构,支持业务流程管理、销售、采购、库存、会计等多个领域。对于零基础的人来说,学习Odoo二次开发可能会有一定的难度,因此需要进行系统和深入的培训。 "Odoo零基础二次开发必备精讲课"是一门专门设计给没有Odoo开发经验的人的课程。该课程将教授学习Odoo二次开发所需的基本知识和技能。 首先,课程会从Odoo的基本架构和核心概念开始,让学生了解Odoo的整体框架和工作方式。这包括模型、视图、控制器、业务流程等的概念解释和使用方法。 其次,课程将介绍Python编程语言,因为Odoo二次开发主要使用Python进行编码。学生将学习Python的基本语法、常用函数和数据类型,掌握Python编程的基本技能。 接下来,课程将重点介绍Odoo的模块开发和定制化。学生将学习如何创建新的模块,如何修改和扩展现有模块,以及如何使用Odoo的自定义字段、视图和报告等功能。课程还会介绍如何进行Odoo模块的部署和测试。 除了理论知识外,课程还包括大量的实践案例和项目练习。学生将跟着教师一步步完成实际的Odoo二次开发任务,并通过实际操作来加深对知识的理解和掌握。 通过参加这门课程,零基础的学生可以系统地学习和掌握Odoo二次开发技能,为将来成为一名优秀的Odoo开发者打下坚实的基础。课程结束后,学生将能够利用Odoo进行定制化开发,满足不同企业的需求,并为企业提供更好的业务解决方案。 ### 回答3: odoo零基础二次开发必备精讲课是一门面向没有odoo开发经验的学员的课程。这门课程通过系统的教学形式,详细地讲解了odoo二次开发的基本概念和关键技能。 在这门课程中,学员将会学习到如何安装和配置odoo开发环境,包括安装odoo使用的数据库和所需软件。学员还将深入了解odoo的基本架构和核心概念,如模型、视图、动作等。通过理论和实践相结合的方式,学员将学会如何使用odoo的API进行开发,包括创建新模块、定义模型、编写视图和控制器等。 此外,该课程还特别强调了odoo二次开发中的一些关键技术和注意事项。学员将学习到如何正确地使用odoo的字段类型,如字符、整数、日期、关联等。还将教授如何使用odoo的搜索、筛选和排序功能来处理大量数据。学员还将了解到如何使用odoo的权限管理系统,确保安全地访问和修改数据。 在整个课程过程中,学员将通过实际案例进行练习,例如创建一个简单的任务管理模块、设计一个销售订单流程等。这将帮助学员将理论知识应用于实际开发中,并加深对odoo二次开发的理解和掌握。 通过参加这门课程,学员将能够从零基础开始,全面掌握odoo二次开发的核心技能和方法。无论是对于想要进一步了解和开发odoo的开发人员,还是对于企业需要进行定制开发的人员来说,这门课程都是非常宝贵的资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值