实践环境

Odoo 14.0-20221212 (Community Edition)

需求描述

如图,给表单新增一个类似聊天的窗口,当记录一些表单活动(本例为自动记录当前记录状态变化)

需求实现

模型定义

odoo14\custom\estate\models\estate_property.py

需要继承mail.thread模型,并为需要追踪的字段设置tracking属性,并设置属性值为真值

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from odoo import models, fields, api class EstateProperty(models.Model):
_name = 'estate.property'
_description = 'estate property table' _inherit = ['mail.thread'] # 必须继承该模型 name = fields.Char(required=True)
state = fields.Selection(
string='State',
selection=[('new','New'),
('offerReceived','Offer Received'),
('offerAccepted', 'Offer Accepted'),
('sold','Sold'),
('canceled', 'Canceled')],
copy=False,
tracking=1 # 该属性不能少,且必须为真值
)
# ...此处代码略

说明:

  • mail.thread 模型,该模型类型为models.AbstractModel,其定义文件为 odoo14\odoo\addons\mail\models\mail_thread.py,其字段命名均以message_开头

  • tracking 该属性为True或数字时,打开针对该属性所属字段的修改日志--当所属字段内容发生变化时,系统会将该字段变化前后的值写入日志中,这个数字的大小影响变更日志在日志中的排序。

__manifest__.py 配置

odoo14\custom\estate\__manifest__.py

需要配置mail模块依赖,因为mail.thread模型归属该模块

#!/usr/bin/env python
# -*- coding:utf-8 -*-
{
'name': 'estate',
'depends': ['base', 'mail'],
# 此处代码略...
}

视图定义

添加<div class="oe_chatter">元素,内容如下

<?xml version="1.0"?>
<odoo>
<!--此处代码略-->
<record id="estate_property_view_form" model="ir.ui.view">
<field name="name">estate.property.form</field>
<field name="model">estate.property</field>
<field name="arch" type="xml">
<form string="estate property form">
<!--此处代码略-->
<div class="oe_chatter">
<field name="message_follower_ids"/>
<field name="message_ids"/>
</div>
</form>
</field>
</record>
</odoo>

如果希望在窗口中展示添加更多功能,可以添加字段,如下

 <div class="oe_chatter">
<field name="message_follower_ids"/>
<field name="activity_ids" widget="mail_activity"/>-->
<field name="message_ids"/>
</div>

说明:activity_ids 来自mail.activity.mixin模型,类型为models.AbstractModel,定义在文件 odoo14\odoo\addons\mail\models\mail_activity.py,其字段命名均以activity_,对应的,模型定义中_inherit 属性也需要添加该模块,如下:

_inherity= ['mail.thread', 'mail.activity.mixin']

效果:

odoo 为form表单视图添加chatter功能的更多相关文章

  1. 上传文件时form表单需要添加的属性

    enctype="multipart/form-data"

  2. python自动化开发-[第二十天]-form表单,CBV和FBV,序列化

    1.CBV和FBV的用法 2.序列化用法 3.form表单 一.CBV和FBV 1.cbv是 class based view(基于类),fbv是function based view(基于函数) 2 ...

  3. day75 form 组件(对form表单进行输入值校验的一种方式)

    我们的组件是什么呢 select distinct(id,title,price) from book ORM: model.py class Book(): title=model.CharFiel ...

  4. 怎么实现form表单提交后不重新刷新当前页面

    怎么实现表单提交后不重新刷新当前页面     如何实现表单提交后不重新刷新当前页面 <form name='form1' id='form1' action='/xbcw/cw/xx_xx.ac ...

  5. Django form表单

    Form介绍 之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来.与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入, ...

  6. form表单提交不刷新页面的方法

    方法1:给form表单加onsubmit事件,值为return false; <form action="" method="post"  onsubmi ...

  7. 微信小程序_(组件)form表单

    Form表单.switch开关.数值选择器效果 官方文档:传送门 点击提交表单(按钮,提交开关,数值选择器,输入文本中)的值,显示在控制台上,点击重置,重置表单中的值. 实现过程 form表单,添加f ...

  8. form表单ajax提交

    这里下面有两种  第一种是form表单里面添加了数据,并且含有上传的图片,第二种是from表单中不含有图片  只有普通数据 第一种form表单中包含有图片的类型: <form method=&q ...

  9. 数据表格,查询、导出共用一个form表单,实现文件流方式下载

    在开发中遇到问题是这样的: 在维护老的管理系统的过程中,老板说让加导出功能:项目中,查询的筛选条件是用的表单提交的方式写的. 解决方案有两种: 一.用ajax方式导出 var array = $('# ...

  10. 使用form表单提交请求如何获取后台返回的数据?

    问题描述 一般的form表单提交是单向的:只能给服务器发送数据,但是无法获取服务器返回的数据,也就是无法读取HTTP应答包. 想要真正的半双工通讯一般需要使用Ajax, 但是Ajax对文件传输也很麻烦 ...

随机推荐

  1. mit 6.824 lab1 思路贴

    前言 为遵守 mit 的约定,这个帖子不贴太多具体的代码,主要聊聊自己在码代码时的一些想法和遇到的问题. 这个实验需要我们去实现一个 map-reduce 的功能.实质上,这个实验分为两个大的板块,m ...

  2. nginx启动流程

    nginx启动流程 1. 根据命令行决定配置文件路径 2. 如果处于升级中则监听环境变量里传递的监听句柄 3. 调用所有核心模块的create_conf方法生成存放配置项的结构体 4. 针对所有核心模 ...

  3. Qt-FFmpeg开发-视频播放(5)

    音视频/FFmpeg #Qt Qt-FFmpeg开发-视频播放[软/硬解码 + OpenGL显示YUV/NV12] 目录 音视频/FFmpeg #Qt Qt-FFmpeg开发-视频播放[软/硬解码 + ...

  4. openstack neutron 报错

    openstack neutron /etc/neutron下面没有dhcp文件 查错发现安装时候打错

  5. REACT列表过度

    <TransitionGroup> <CSSTransition> <li>aaaa</li> </CSSTransition> </ ...

  6. 【二分答案】P2390 地标访问

    \(\color{black}\text{P2390 地标访问 (传送门)}\) 学过区间 DP 的,看到这题的第一反应都是:访问的地标一定是一个区间,并且在不断扩大,区间 DP!可看到数据范围,又瞬 ...

  7. HTML 使用动态脚本

    这个 HTML 图片框架 这个HTML支持的脚本属于动态的插件形式的程序 用分段数方式实现动画 1定时器 2函数 计算机有四则运算加减乘除 还有一个是 ^ (shift + 6这个符号是余数,8^3是 ...

  8. 三月十五号 anaconda 安装 tensorflow 教程

    今天下载anaconda 并安装tensorflow 首先下载anaconda  因为官网下载特别慢 所有选择国内镜像网站 https://mirrors.tuna.tsinghua.edu.cn/a ...

  9. json LocalDateTime转对象

    json LocalDateTime转对象 feign.codec.DecodeException: JSON parse error: Can not deserialize instance of ...

  10. 07-Linux文件权限管理

    文件的类型 Linux的哲学思想:一切皆文件. Linux的文件分为多种类型. 可以通过ll命令查看文件的类型: ll #输出: -rw-------. 1 root root 1266 2月 29 ...