实践环境

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. 未能加载文件或程序集“UFIDA.U8.UAP.GcRegister, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项

    这是做采购入库单新增的时候遇到的问题,我是采用模仿写用友u8的zpurrkdhead 主表视图和子表视图zpurrkdtail 去构建 xml文档这样做的,但是再做的时候 [cgcroutecode] ...

  2. 【Effective C++】设计与声明——成员变量和成员函数

    将成员变量声明为private 为什么成员变量不该是public? (1)从语法一致性来说,如果成员变量不是public,就需要通过成员函数访问成员变量.public接口内的每样东西都是函数的话,客户 ...

  3. Java异常中throw 与throws的区别

    throw 与 throws区别 在Java中,throws和throw是两个不同的关键字,它们在异常处理中起着不同的作用. throws关键字: throws用于声明一个方法可能会抛出的异常.当一个 ...

  4. 基于Vue的二进制时钟组件 -- fx67llBinaryClock

    fx67llClock Easy & Good Clock ! npm 组件说明 一个基于Vue的二进制时钟组件,没什么卵用,做着好玩,可以方便您装饰个人主页 使用步骤 npm install ...

  5. .net core .net5 asp.net core mvc 与quartz.net 3.3.3 新版本调用方式

    参照了:https://www.cnblogs.com/LaoPaoEr/p/15129899.html 1.项目Nuget引用Quartz.AspNetCore和Quartz.Extensions. ...

  6. 使用WinSW把nginx做成windows服务

    1.下载nginx:http://nginx.org/en/download.html 2.下载win sw:https://github.com/winsw/winsw/releases/tag/v ...

  7. NFS练习

    NFS练习题 1.开放/nfs/share目录,提供给 任意用户 只读(/etc/exports ro) 查询 1.任意客户端2.任意的用户​ 服务端 showmout exportfs system ...

  8. JS 中 == 和 === 区别是什么?

    a.对于string,number等基础类型,==和===有区别:不同类型间比较,==之比较"转化成同一类型后的值"看"值"是否相等,===如     果类型不 ...

  9. ansible(1)---师傅领进门

    背景 在企业里,运维需要配合开发进行产品上架,说白了就是把写好的代码上服务器.那么,就会出现这样的问题:需要运维人员配置好系统,配置好环境,配置好网络,配置好程序,配置好所有所有的依赖环境.     ...

  10. Android Framework:如何让 App 拿到Power key 值

    Android app:如何让 App 拿到Power key 值 原文(有删改):https://blog.csdn.net/qq_37858386/article/details/10383566 ...