3.odoo13之跟着官网做项目/实例(模型关联,模型类模型表的关联)

1.建立房地产属性类型的表

还是在models中的estate_property.py中,

并且添加关联,让房地产表和属性表关联起来,

并且加上买方和销售人员,默认系统的模型表,

完整estate_property.py如下代码:(第二个模型类)

from datetime import datetime

from dateutil.relativedelta import relativedelta

from odoo import models, fields, api


class estate_property(models.Model):
    _name = 'estate.property'
    _description = '不动产模型类'

    name = fields.Char(required=True, string='名称')  # 名称
    description = fields.Text(string='描述')  # 描述
    postcode = fields.Char(string='邮政编码')  # 邮政编码

    @api.model
    def _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 datetime

from dateutil.relativedelta import relativedelta

from odoo import models, fields, api


class estate_property(models.Model):
    _name = 'estate.property'
    _description = '不动产模型类'

    name = fields.Char(required=True, string='名称')  # 名称
    description = fields.Text(string='描述')  # 描述
    postcode = fields.Char(string='邮政编码')  # 邮政编码

    @api.model
    def _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.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还是那个同伟伟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值