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之跟着官网做项目/实例(模型关联,模型类模型表的关联)相关推荐

  1. 2.odoo13之跟着官网做项目/实例(创建菜单,创建action,创建视图、搜索过滤器,分组)

    目录 1.创建菜单 2.创建动作,action 3.运行程序,创建数据 4.添加自定义列表视图(树视图) 5.添加表单视图 6.添加搜索视图 7.搜索视图的过滤器,以及搜索分组 1.创建菜单 在vie ...

  2. 1.odoo13之跟着官网做项目/实例(创建模块、创建模型类、配置角色安全权限文件)

    目录 1.创建模块 2.运行程序,安装上模块 3.创建模型类 4.配置角色安全权限文件 1.创建模块 在主目录下,新建custom的文件夹 进入到pycharm中的命令行,创建estate命令 pyt ...

  3. 跟着官网学Python(8):输入输出

    "Python输入.输出.文件读写以及异常知识." 01 面临问题 继续跟着官网学Python,第7章输入输出. 前面已经基本学完Python的语法部分,也学会如何使用轮子,但是编 ...

  4. 官网改版项目问题总结

    最近官网改版的任务交给了我,开发使用的是jq操作dom,后台php渲染的方式,如今已经开发完成,现在把一些问题记录下来,已备忘. 1.Safari浏览器不能自动播放视频 这次官网首页是有一个内嵌视频, ...

  5. imtoken官网1:1实例,后台可查询助记词

    官网1:1源码,请勿使用在非法用途,源码仅限研究. 链接: https://pan.baidu.com/s/1gXOEvKpC-ktEW6OORaHwfg 提取码:YYDS

  6. openstack跟着官网部署过程

    openstack搭建 环境准备 主机 配置 ip地址 网卡模式 控制节点 4核4G eth0:192.168.200.10/24;eth1:10.0.1.10/24 NAT/仅主机 计算节点 4核4 ...

  7. vue2项目之明日科技51购物商店官网-本地项目版本

    介绍 全部都用localStorage,没有与服务器的交互 视频详情数据没有~但是你可以自己做 添加了导航守卫 地址编辑页没有写~,你可以自己写 其他都OK,巴拉巴拉(应付应付最后的作业~~) 下载地 ...

  8. 跟着官网学k8s-05运行应用程序的多个实例

    一般情况下pod的数量不会是一个,多个pod可以让服务更加的可靠并且可以承受更大的流量. service的type类型可以为LoadBalancer即负载均衡.使用该类型service需要指定外部负载 ...

  9. 跟着官网学k8s-04使用Service暴露您的应用

    本节主要介绍sk8s中的service Kubernetes 的 Service 是一个抽象层,它定义了一组 Pod 的逻辑集,并为这些 Pod 支持外部流量暴露.负载平衡和服务发现 简单说,serv ...

最新文章

  1. 初识C语言---(2)
  2. java中有关覆写的总结
  3. docker pull下载镜像时的报错及其解决方法
  4. 《快活帮》第九次团队作业:Beta冲刺与验收准备
  5. java 检查bytebuf长度_Java学习笔记16-Netty缓冲区ByteBuf详解
  6. html设置样式不继承_web前端入门到实战:css的核心原理分为优先级原则与继承原则两大部分...
  7. 我的世界末日之后无限法则服务器,《我的世界》全新玩法无限法则上线
  8. win7 怎么干净删除php,window_win7系统如何删除注册表里面的垃圾文件?,win7系统如何删除注册表里面的 - phpStudy...
  9. 给你的网页添加随机BGM背景音乐
  10. (7)FPGA面试题Latch和Register区别
  11. 什么是虚拟DOM(React16源码分析)
  12. Delphi【变体记录及存储方式】
  13. Python编写求100以内素数
  14. 洛谷 P2141 珠心算测验
  15. c++中如何把任意类型的指针转化为void*
  16. 2022护眼产品展,视力康复展,山东国际眼健康展会,护眼仪展
  17. pycharm下载及安装说明
  18. 科技云报道:超融合遍地开花,用户离“云计算自由”却依然很远?
  19. MySQL中级优化教程(五)——数据库建表时数据类型的选择
  20. 使用vite和Element Plus,实现部署后不修改代码/打包,新增主题/皮肤包

热门文章

  1. java的jbutton啥意思,Jbutton和Jpanel和JFrame之间的区别?
  2. mysql运行报错64bit_关于MySQL5.6.25在Win7 64bit下重装后无法启动的解决方法
  3. 变成一列_Excel中将多列,快速变成1列,困惑了多年,今天总算学会了
  4. 零基础带你五行代码实现聊天机器人-再这么玩?咱还能做朋友吗?
  5. RabbitMQ之呕心沥血的总结(图文并茂、万字级别、毕生所学)
  6. 《移动项目实践》实验报告——Android网络通信
  7. 牛客题霸 NC22 合并两个有序的数组
  8. Vue + Element UI + Spring Boot——易班优课YOOC课群在线测试自动答题解决方案(十)问题管理页面
  9. CG CTF PWN When did you born?
  10. II play with GG