odoo17开发教程(8):设置界面UI的字段属性

目录

添加字段

给字段设置只读和不可拷贝

给字段添加默认值

保留字段


本节目标:在本文末尾,售价(selling price)应为只读值,卧室数量(bedrooms)和可用日期(availability date)应为默认值。此外,在复制记录时,售价和可用日期值不会被复制。

Interaction between model and view

添加字段

字段 active 和 state 需要被添加到 estate.property 模型中。

我们现在的模型看起来是这样的,注意新添加的两个字段:

class EstateProperty(models.Model):
    _name = "estate_property"
    _description = "Estate Property"
    
    name = fields.Char(required=True)
    description = fields.Text()
    postcode = fields.Char()
    date_available = fields.Date()
    expected_price = fields.Float(required=True)
    selling_price = fields.Float()
    bedrooms = fields.Integer()
    living_area = fields.Integer()
    facades = fields.Integer()  # 外墙
    garage = fields.Boolean()
    garden = fields.Boolean()
    garden_area = fields.Integer()
    garden_orientation = fields.Selection([
        ("north", "North"),
        ("south", "South"),
        ("east", "East"),
        ("west", "West"),
    ])
    active = fields.Boolean(default=True)
    state = fields.Selection([
        ("new", "New"),
        ("offer_received", "Offer Received"),
        ("offer_accepted", "Offer Accepted"),
        ("sold", "Sold"),
        ("canceled", "Canceled"),
    ], default="new",copy=False)

到目前为止,我们只在房地产广告中使用了通用视图,但在大多数情况下,我们希望对视图进行微调。在 Odoo 中可以进行许多微调,但通常第一步是确保:

  • 某些字段有默认值
  • 某些字段为只读
  • 复制记录时不会复制某些字段

 在我们的房地产模块中,我们希望做到以下几点:

  • 售价应为只读(稍后将自动填写)
  • 复制记录时,不应复制供货日期和售价
  • 默认卧室数量应为 2
  • 默认可用日期应为 3 个月内

在进一步进行视图设计之前,让我们先回到模型定义。我们看到,一些属性(如 required=True)会影响数据库中的表模式。

给字段设置只读和不可拷贝

下面给我们的estate_property里面的selling_price设置只读,和不可拷贝

date_available = fields.Date(copy=False)
selling_price = fields.Float(readonly=True, copy=False)

重启容器,Upgrade你的模块,你将看到如下效果,现在selling price应该不可改了:

给字段添加默认值

任何字段都可以有默认值。在字段定义中,添加 default=X 选项,其中 X 可以是一个 Python 字面值(布尔、整数、浮点、字符串),也可以是一个获取模型并返回值的函数:

name = fields.Char(default="Unknown")
last_seen = fields.Datetime("Last Seen", default=fields.Datetime.now)

name 字段的默认值为 "未知",而 last_seen 字段的默认值为当前时间。

下面给我们的estate_property模型设置默认值。

  • 默认卧室数量为 2
  • 默认可用日期为 3 个月

模型代码如下:

from odoo import models, fields, api
from dateutil.relativedelta import relativedelta

class EstateProperty(models.Model):
    _name = "estate_property"
    _description = "Estate Property"

    def _get_default_date_available(self):
        # 使用 fields.Date.today() 获取当前日期,并添加三个月
        return fields.Date.today() + relativedelta(months=+3)
    
    name = fields.Char(required=True, default="Unknown")
    description = fields.Text()
    postcode = fields.Char()
    date_available = fields.Date(copy=False, default=_get_default_date_available)
    expected_price = fields.Float(required=True)
    selling_price = fields.Float(readonly=True, copy=False)
    bedrooms = fields.Integer()
    living_area = fields.Integer()
    facades = fields.Integer()  # 外墙
    garage = fields.Boolean()
    garden = fields.Boolean()
    garden_area = fields.Integer()
    garden_orientation = fields.Selection([
        ("north", "North"),
        ("south", "South"),
        ("east", "East"),
        ("west", "West"),
    ])
    active = fields.Boolean(default=True)
    state = fields.Selection([
        ("new", "New"),
        ("offer_received", "Offer Received"),
        ("offer_accepted", "Offer Accepted"),
        ("sold", "Sold"),
        ("canceled", "Canceled"),
    ], default="new")

 重启容器,并Upgrade你的模块,点击新建的时候可以看到名字默认为Unknown,日期自动变成了3个月后

保留字段
 

一些字段名称是为预定义行为保留的。当需要相关行为时,应在模型上定义它们。

我们已经在文章的开头将active和state字段添加到 estate.property 模型中,当把active设置成false是,默认的房屋列表中将不会显示active=false的房屋。

active 是保留字段,具有特定行为:当记录的 active=False 时,它将自动从任何搜索中移除。要显示创建的属性,需要专门搜索非活动记录。

Inactive records

有了默认视图,我们就可以与用户界面交互了!下一节我们将定义自己的视图。

继续加油!

上一篇  odoo17开发教程(7):用户界面UI的交互-菜单_odoo17开发教程之图标-CSDN博客

下一篇  odoo17开发教程(9):自定义视图_构建仪表板 odoo-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值