3.odoo13之跟着官网做项目/实例(模型关联,模型类模型表的关联)
生活随笔
收集整理的這篇文章主要介紹了
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之跟着官网做项目/实例(
- 下一篇: odoo13中的模型类(模型属性、字段属