当前位置: 首页 > news >正文

odoo16 one2many字段的 domain

最近在odoo project模块的基础上做二开,给task表加了一个版本字段version_id,然后重写了
project表的Task_ids, 并且增加了一个domain,结果折腾了大半天才搞定

写法1

这也是最初的写法:

    version_id = fields.Many2one("hx.prj.task.plan.version", "计划版本")task_ids = fields.One2many('project.task', 'project_id', string='Tasks',domain="[('version_id', '=', version_id)]")

结果发现domain不起作用,仔细阅读源代码

    def get_domain_list(self, model):""" Return a list domain from the domain parameter. """domain = self.domainif callable(domain):domain = domain(model)return domain if isinstance(domain, list) else []

如果domain是字符串就返回空列表,有点懵啊,代码中有很多domain都是用引号括起来的!!!
既然如此,那就把引号去掉吧

写法2

不带引号

 	task_ids = fields.One2many('project.task', 'project_id', string='Tasks',domain=[('version_id', '=', version_id)])

这样写,报错了,

psycopg2.ProgrammingError: can't adapt type 'Many2one'

其实,其他的One2Many字段我也不带引号,是ok的。

写法3

实在没有办法了,于是搜索odoo其他的one2many字段,看看domain是怎么写的
发现两个事:
1、one2many的domain确实是不带引号的
2、还有一种写法,用lambda写一个匿名函数

website_message_ids = fields.One2many(domain=lambda self: [('model', '=', self._name), ('message_type', 'in', ['email', 'comment'])])

我尝试了一下这种写法,

 task_ids = fields.One2many('project.task', 'project_id', string='Tasks',domain=lambda self:[('version_id', '!=', False),('version_id', '=', self.version_id.id)])

这种写法可以引用self, 很意外,测试通过了。
仔细看上面的get_domain_list 函数,domain 可以是一个函数

if callable(domain):domain = domain(model)

关于domain, 要学习的地方还有很多,特别是关系字段的domain,更复杂一些。

http://www.lryc.cn/news/219889.html

相关文章:

  • 一份优秀测试用例的设计策略
  • 自动驾驶行业观察之2023上海车展-----智驾供应链(3)
  • 倒计时丨3天后,我们直播间见!
  • c语言经典算法—二分查找,冒泡,选择,插入,归并,快排,堆排
  • 网站SSL证书有什么用
  • ubuntu 20.04 server安装
  • 造数工具调研
  • Linux文件系统目录结构
  • CANoe新建XML自动化Test Modules
  • 国内某发动机制造工厂RFID智能制造应用解决方案
  • 【SpringCloud Alibaba -- Nacos】Linux 搭建 Nacos 集群
  • 程序员使用 ChatGPT的 10 种最佳方式
  • 各种各类好用热门API推荐
  • 高速串行总线——SATA
  • 不用流氓软件,如何在户外使用手机听下载到家中电脑里的音乐文件呢?
  • 函数数组指针示例
  • 万宾科技管网水位监测预警,管网水位的特点有哪些?
  • vue element admin master 去掉登陆
  • 没有MES管理系统,先用数据采集设备能有用吗
  • 【JAVA学习笔记】61 - 线程入门、常用方法、同步机制,以及本章作业(难点)
  • C#开发的OpenRA游戏之步兵射击(2)
  • 基于Pytorch框架的LSTM算法(一)——单维度单步滚动预测(2)
  • 安全操作(安卓推流)程序
  • 【STM32】Systick定时器
  • ZooKeeper监控
  • lua # 获取table数组长度
  • 前端框架Vue学习 ——(七)Vue路由(Vue Router)
  • 2023-2024-1高级语言程序设计-一维数组
  • 史上最全,从初级测试到高级测试开发面试题汇总,冲击大厂年50w+
  • Python基础入门例程42-NP42 公式计算器(运算符)