3.odoo13之跟着官网做项目/实例(模型关联,模型类模型表的关联)
1.建立房地产属性类型的表
还是在models中的estate_property.py中,
并且添加关联,让房地产表和属性表关联起来,
并且加上买方和销售人员,默认系统的模型表,
完整estate_property.py如下代码:(第二个模型类)
from datetime import datetimefrom dateutil.relativedelta import relativedeltafrom odoo import models, fields, apiclass estate_property(models.Model):_name = 'estate.property'_description = '不动产模型类'name = fields.Char(required=True, string='名称') # 名称description = fields.Text(string='描述') # 描述postcode = fields.Char(string='邮政编码') # 邮政编码@api.modeldef _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) # 可用日期expected_price = fields.Float(required=True, string='预期价格') # 预期价格selling_price = fields.Float(string='售价', readonly=True, copy=False) # 售价bedrooms = fields.Integer(string='卧室数量', default=2) # 卧室数量living_area = fields.Integer(string='居住面积') # 居住面积facades = fields.Integer(string='正面') # 正面(外墙)garage = fields.Boolean(string='车库') # 车库garden = fields.Boolean(string='花园') # 花园garden_area = fields.Integer(string='绿化面积') # 绿化面积garden_orientation = fields.Selection(string='花园方向',selection=[('North', '北面'),('South', '南面'),('East', '东面'),('West', '西面'),]) # 花园方向# 不勾选的话,保存之后不可见active = fields.Boolean(default=True)state = fields.Selection(required=True, copy=False, default='New',selection=[('New', '新建'),('Offer Received', '收到报价'),('Offer Accepted', '接收报价'),('Sold', '出售'),('Canceled', '取消'),])sales_man_id = fields.Many2one('res.users', string='销售人员', default=lambda self: self.env.user)buyer_id = fields.Many2one('res.partner', string='买方', default=lambda self: self.env.company.id)property_type_id = fields.Many2one('estate.property.type', string='房产类型')class estate_property_type(models.Model):_name = 'estate.property.type'_description = '房地产属性类型表'name = fields.Char(required=True, string='房产类型')
2.为新建的模型类,再加上菜单
在views文件夹下,的estate_menus.xml中,继续添加,完整的如下
<odoo><data><menuitem id="estate_menu_root" name="房地产"/><menuitem id="estate_advertisements" parent="estate_menu_root" name="广告"/><menuitem id="estate_estate_properties" parent="estate_advertisements"name="房产" action="estate_model_action"/><menuitem id="estate_settings" parent="estate_menu_root" name="设置"/><menuitem id="estate_settings_property_types" parent="estate_settings" name="房产类型"action="action_property_types"/></data> </odoo>
效果:
3.为菜单添加上action,关联上新建的模型类上面,并且加上为之前的模型类的视图,加上对应的关联属性,Many2one
完整的estate_property_views.xml,如下:(可以和之前的对照的去看)
<odoo><data><record id="estate_model_action" model="ir.actions.act_window"><field name="name">房产</field><field name="res_model">estate.property</field><field name="view_mode">tree,form</field></record><record id="estate_view_tree" model="ir.ui.view"><field name="name">estate.view.tree</field><field name="model">estate.property</field><field name="arch" type="xml"><tree string="estate视图"><field name="name" string="名称"/><field name="postcode" string="邮政编码"/><field name="bedrooms" string="卧室数量"/><field name="living_area" string="居住面积"/><field name="expected_price" string="预期价格"/><field name="selling_price" string="售价"/><field name="date_availability" string="可用日期"/></tree></field></record><record id="estate_form_view" model="ir.ui.view"><field name="name">estate.form.view</field><field name="model">estate.property</field><field name="arch" type="xml"><form string="estate_form"><sheet string="sdfsdf"><h1><field name="name"/></h1><group col="2"><group><field name="property_type_id" string="房产类型"/><field name="postcode" string="邮政编码"/><field name="date_availability" string="可用日期"/></group><group><field name="expected_price" string="预期价格"/><field name="selling_price" string="售价"/></group></group><notebook><page string="描述"><group><field name="description" string="描述"/><field name="bedrooms" string="卧室数量"/><field name="living_area" string="居住面积"/><field name="facades" string="正面"/><field name="garage" string="车库"/><field name="garden" string="花园"/><field name="garden_area" string="绿化面积"/><field name="garden_orientation" string="花园方向"/></group></page><page string="其他信息"><group><field name="sales_man_id" string="销售人员"/><field name="buyer_id" string="买方"/></group></page></notebook></sheet></form></field></record><record model="ir.ui.view" id="estate_search_view"><field name="name">estate.search.view</field><field name="model">estate.property</field><field name="arch" type="xml"><search><field name="name" string="名称"/><field name="postcode" string="邮政编码"/><field name="expected_price" string="预期价格"/><field name="bedrooms" string="卧室数量"/><field name="living_area" string="居住面积"/><field name="facades" string="正面"/><field name="property_type_id" string="销售人员"/><filter string="不可见的" name="active" domain="[('active', '=', True)]"/><group expand="1" string="分组"><filter string="邮政编号" name="postcode" context="{'group_by':'postcode'}"/></group></search></field></record><record id="action_property_types" model="ir.actions.act_window"><field name="name">房产类型</field><field name="res_model">estate.property.type</field><field name="view_mode">tree,form</field></record></data> </odoo>
查看效果:
在房地产的模型类表中,选择房产类型时候,就已经和房产类型的表进行关联了,可以实际操作的点击查看。
4.Many2many,多对多,添加房地产标签模型类以及视图
房地产标签模型。
在models中的estate_property.py中,完整estate_property.py如下代码(第三个模型类)
from datetime import datetimefrom dateutil.relativedelta import relativedeltafrom odoo import models, fields, apiclass estate_property(models.Model):_name = 'estate.property'_description = '不动产模型类'name = fields.Char(required=True, string='名称') # 名称description = fields.Text(string='描述') # 描述postcode = fields.Char(string='邮政编码') # 邮政编码@api.modeldef _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) # 可用日期expected_price = fields.Float(required=True, string='预期价格') # 预期价格selling_price = fields.Float(string='售价', readonly=True, copy=False) # 售价bedrooms = fields.Integer(string='卧室数量', default=2) # 卧室数量living_area = fields.Integer(string='居住面积') # 居住面积facades = fields.Integer(string='正面') # 正面(外墙)garage = fields.Boolean(string='车库') # 车库garden = fields.Boolean(string='花园') # 花园garden_area = fields.Integer(string='绿化面积') # 绿化面积garden_orientation = fields.Selection(string='花园方向',selection=[('North', '北面'),('South', '南面'),('East', '东面'),('West', '西面'),]) # 花园方向# 不勾选的话,保存之后不可见active = fields.Boolean(default=True)state = fields.Selection(required=True, copy=False, default='New',selection=[('New', '新建'),('Offer Received', '收到报价'),('Offer Accepted', '接收报价'),('Sold', '出售'),('Canceled', '取消'),])sales_man_id = fields.Many2one('res.users', string='销售人员', default=lambda self: self.env.user)buyer_id = fields.Many2one('res.partner', string='买方', default=lambda self: self.env.company.id)property_type_id = fields.Many2one('estate.property.type', string='房产类型')property_tag_ids = fields.Many2many('estate.property.tag', string='房产标签')class estate_property_type(models.Model):_name = 'estate.property.type'_description = '房地产属性类型表'name = fields.Char(required=True, string='房产类型')class estate_property_tag(models.Model):_name = 'estate.property.tag'_description = '房地产属性标签表'name = fields.Char(required=True, string='标签')
菜单
在views文件夹下,的estate_menus.xml中,继续添加,完整的如下
<odoo><data><menuitem id="estate_menu_root" name="房地产"/><menuitem id="estate_advertisements" parent="estate_menu_root" name="广告"/><menuitem id="estate_estate_properties" parent="estate_advertisements"name="房产" action="estate_model_action"/><menuitem id="estate_settings" parent="estate_menu_root" name="设置"/><menuitem id="estate_settings_property_types" parent="estate_settings" name="房产类型"action="action_property_types"/><menuitem id="estate_settings_property_tag" parent="estate_settings" name="房产标签"action="action_property_tag"/></data> </odoo>
动作以及视图
完整的estate_property_views.xml,如下:(可以和之前的对照的去看)
<odoo><data><record id="estate_model_action" model="ir.actions.act_window"><field name="name">房产</field><field name="res_model">estate.property</field><field name="view_mode">tree,form</field></record><record id="estate_view_tree" model="ir.ui.view"><field name="name">estate.view.tree</field><field name="model">estate.property</field><field name="arch" type="xml"><tree string="estate视图"><field name="name" string="名称"/><field name="postcode" string="邮政编码"/><field name="bedrooms" string="卧室数量"/><field name="living_area" string="居住面积"/><field name="expected_price" string="预期价格"/><field name="selling_price" string="售价"/><field name="date_availability" string="可用日期"/></tree></field></record><record id="estate_form_view" model="ir.ui.view"><field name="name">estate.form.view</field><field name="model">estate.property</field><field name="arch" type="xml"><form string="estate_form"><sheet string="sdfsdf"><h1><field name="name"/></h1><field name="property_tag_ids" widget="many2many_tags"/><group col="2"><group><field name="property_type_id" string="房产类型"/><field name="postcode" string="邮政编码"/><field name="date_availability" string="可用日期"/></group><group><field name="expected_price" string="预期价格"/><field name="selling_price" string="售价"/></group></group><notebook><page string="描述"><group><field name="description" string="描述"/><field name="bedrooms" string="卧室数量"/><field name="living_area" string="居住面积"/><field name="facades" string="正面"/><field name="garage" string="车库"/><field name="garden" string="花园"/><field name="garden_area" string="绿化面积"/><field name="garden_orientation" string="花园方向"/></group></page><page string="其他信息"><group><field name="sales_man_id" string="销售人员"/><field name="buyer_id" string="买方"/></group></page></notebook></sheet></form></field></record><record model="ir.ui.view" id="estate_search_view"><field name="name">estate.search.view</field><field name="model">estate.property</field><field name="arch" type="xml"><search><field name="name" string="名称"/><field name="postcode" string="邮政编码"/><field name="expected_price" string="预期价格"/><field name="bedrooms" string="卧室数量"/><field name="living_area" string="居住面积"/><field name="facades" string="正面"/><field name="property_type_id" string="销售人员"/><filter string="不可见的" name="active" domain="[('active', '=', True)]"/><group expand="1" string="分组"><filter string="邮政编号" name="postcode" context="{'group_by':'postcode'}"/></group></search></field></record><record id="action_property_types" model="ir.actions.act_window"><field name="name">房产类型</field><field name="res_model">estate.property.type</field><field name="view_mode">tree,form</field></record><record id="action_property_tag" model="ir.actions.act_window"><field name="name">房产标签</field><field name="res_model">estate.property.tag</field><field name="view_mode">tree,form</field></record></data> </odoo>
5.
3.odoo13之跟着官网做项目/实例(模型关联,模型类模型表的关联)相关推荐
- 2.odoo13之跟着官网做项目/实例(创建菜单,创建action,创建视图、搜索过滤器,分组)
目录 1.创建菜单 2.创建动作,action 3.运行程序,创建数据 4.添加自定义列表视图(树视图) 5.添加表单视图 6.添加搜索视图 7.搜索视图的过滤器,以及搜索分组 1.创建菜单 在vie ...
- 1.odoo13之跟着官网做项目/实例(创建模块、创建模型类、配置角色安全权限文件)
目录 1.创建模块 2.运行程序,安装上模块 3.创建模型类 4.配置角色安全权限文件 1.创建模块 在主目录下,新建custom的文件夹 进入到pycharm中的命令行,创建estate命令 pyt ...
- 跟着官网学Python(8):输入输出
"Python输入.输出.文件读写以及异常知识." 01 面临问题 继续跟着官网学Python,第7章输入输出. 前面已经基本学完Python的语法部分,也学会如何使用轮子,但是编 ...
- 官网改版项目问题总结
最近官网改版的任务交给了我,开发使用的是jq操作dom,后台php渲染的方式,如今已经开发完成,现在把一些问题记录下来,已备忘. 1.Safari浏览器不能自动播放视频 这次官网首页是有一个内嵌视频, ...
- imtoken官网1:1实例,后台可查询助记词
官网1:1源码,请勿使用在非法用途,源码仅限研究. 链接: https://pan.baidu.com/s/1gXOEvKpC-ktEW6OORaHwfg 提取码:YYDS
- openstack跟着官网部署过程
openstack搭建 环境准备 主机 配置 ip地址 网卡模式 控制节点 4核4G eth0:192.168.200.10/24;eth1:10.0.1.10/24 NAT/仅主机 计算节点 4核4 ...
- vue2项目之明日科技51购物商店官网-本地项目版本
介绍 全部都用localStorage,没有与服务器的交互 视频详情数据没有~但是你可以自己做 添加了导航守卫 地址编辑页没有写~,你可以自己写 其他都OK,巴拉巴拉(应付应付最后的作业~~) 下载地 ...
- 跟着官网学k8s-05运行应用程序的多个实例
一般情况下pod的数量不会是一个,多个pod可以让服务更加的可靠并且可以承受更大的流量. service的type类型可以为LoadBalancer即负载均衡.使用该类型service需要指定外部负载 ...
- 跟着官网学k8s-04使用Service暴露您的应用
本节主要介绍sk8s中的service Kubernetes 的 Service 是一个抽象层,它定义了一组 Pod 的逻辑集,并为这些 Pod 支持外部流量暴露.负载平衡和服务发现 简单说,serv ...
最新文章
- 初识C语言---(2)
- java中有关覆写的总结
- docker pull下载镜像时的报错及其解决方法
- 《快活帮》第九次团队作业:Beta冲刺与验收准备
- java 检查bytebuf长度_Java学习笔记16-Netty缓冲区ByteBuf详解
- html设置样式不继承_web前端入门到实战:css的核心原理分为优先级原则与继承原则两大部分...
- 我的世界末日之后无限法则服务器,《我的世界》全新玩法无限法则上线
- win7 怎么干净删除php,window_win7系统如何删除注册表里面的垃圾文件?,win7系统如何删除注册表里面的 - phpStudy...
- 给你的网页添加随机BGM背景音乐
- (7)FPGA面试题Latch和Register区别
- 什么是虚拟DOM(React16源码分析)
- Delphi【变体记录及存储方式】
- Python编写求100以内素数
- 洛谷 P2141 珠心算测验
- c++中如何把任意类型的指针转化为void*
- 2022护眼产品展,视力康复展,山东国际眼健康展会,护眼仪展
- pycharm下载及安装说明
- 科技云报道:超融合遍地开花,用户离“云计算自由”却依然很远?
- MySQL中级优化教程(五)——数据库建表时数据类型的选择
- 使用vite和Element Plus,实现部署后不修改代码/打包,新增主题/皮肤包
热门文章
- java的jbutton啥意思,Jbutton和Jpanel和JFrame之间的区别?
- mysql运行报错64bit_关于MySQL5.6.25在Win7 64bit下重装后无法启动的解决方法
- 变成一列_Excel中将多列,快速变成1列,困惑了多年,今天总算学会了
- 零基础带你五行代码实现聊天机器人-再这么玩?咱还能做朋友吗?
- RabbitMQ之呕心沥血的总结(图文并茂、万字级别、毕生所学)
- 《移动项目实践》实验报告——Android网络通信
- 牛客题霸 NC22 合并两个有序的数组
- Vue + Element UI + Spring Boot——易班优课YOOC课群在线测试自动答题解决方案(十)问题管理页面
- CG CTF PWN When did you born?
- II play with GG