在整理英语单词开发模块的过程中,有这样一个需求,就是我在查询界面里输入一个查询的值A,这个A可能是下面的任何一个值

1.一个英语单词  2.汉语文字  3.一个英语单词的部分

这里有两张表:english.lexicon 和 english.lexicon.explain,前者是主表记录单词信息,后者是从表记录单词的解释,二者是一对多的关系。

from odoo import fields, models

class EnglishLexicon(models.Model):

    _name = 'english.lexicon'
_description = 'english lexicon' word = fields.Char(string="Word", required=True, index=True)
lexicon_explain_ids = fields.One2many('english.lexicon.explain', 'english_lexicon_id', "Detail")
america_accent = fields.Char(string="America Accent")
british_accent = fields.Char(string="British Accent")
chinese_mean = fields.Text(string="Chinese Mean")
america_voice_url = fields.Char(string="America URL")
british_voice_url = fields.Char(string="British URL")
source_name = fields.Char(string="From")
sequence = fields.Integer()
is_updated = fields.Boolean(string="Is Updated", default=False) class EnglishLexiconExplain(models.Model): _name = 'english.lexicon.explain'
_description = 'english lexicon explain' english_lexicon_id = fields.Many2one('english.lexicon', 'EnglishLexicon', ondelete='cascade', required=True)
order = fields.Integer()
raw_html_mean = fields.Text(string="Html Mean")
gram = fields.Char(string="Gram")
english_mean = fields.Text(string="Processed Mean")
chinese_mean = fields.Text(string="Chinese Mean")
is_format = fields.Boolean(string="Is Format", default=False)

那么这一个参数怎么在odoo中实现这个查询效果呢,即 select *  from tableA where filed1 like '%A%' or field2 like '%A%' 的动态效果呢?

其实在了解了odoo的searchview页面的基础知识之后,这个很容易实现,也就几行代码的事情。

        <record id="english_lexicon_view_search" model="ir.ui.view">
<field name="name">english.lexicon.search</field>
<field name="model">english.lexicon</field>
<field name="arch" type="xml">
<search string="Search">
<field name="word" filter_domain="['|', ('word', 'ilike', self), ('lexicon_explain_ids.chinese_mean', 'ilike', self)]"/>
<field name="chinese_mean"/>
</search>
</field>
</record>

特别注意上面的红色部分,在浏览器中输入参数,用户一旦对应word字段,odoo框架就会匹配2个条,word 字段 和 子表的chinese_mean字段作为条件进行查询。

同时这里也向我们展示了如何通过主表访问子表的任何一个字段的格式: ( {子表的id集合}.{子表的具体字段},   '操作符合' ,   '参数值' ) 。

自此我们就完成了多表多字段对应一个参数的查询,就简简单单的在xml文件中做了下配置,这一点上更加体现出了odoo框架的强大。不需要自己再去组织逻辑去动态的拼凑sql语句等功能。

或许这里的意义不止如此,利用这个特性我们甚至不用针对app进行特别的编码,只需要在ionic的部分传递对应的domian参数即可实现手机端的调用,接下来让我们拭目以待。

最新文章

  1. bzoj 3611: [Heoi2014]大工程
  2. Hadoop RPC机制的使用
  3. 【64测试20161112】【Catalan数】【数论】【扩展欧几里得】【逆】
  4. 设计模式-&gt;观察者模式
  5. PictureBox控件鼠标进入的手形改变和提示
  6. HBase的JavaAPI操作
  7. 常见shell操作
  8. codeforces 622F. The Sum of the k-th Powers 拉格朗日插值法
  9. Bear and Friendship Condition-HZUN寒假集训
  10. Odoo薪酬管理 公式配置
  11. jasperreports+IReport 5.56,集成到Spring MVC4.0案例
  12. PHP获取日期时间信息
  13. c# 解密微信encryptedData字段
  14. Cisco 日常巡检命令
  15. CentOS 7 使用 ACL 设置文件权限
  16. 04 爬虫数据存储之Mongodb
  17. 【Java算法】冒泡排序
  18. samba安装
  19. Oracle VM VirtualBox如何设置网络地址转换NAT
  20. Swift5 语言参考(二) 词法结构

热门文章

  1. loadrunner&#160;脚本开发-定义全局变量
  2. Jni OnLoad()和OnUnload()
  3. Android 动态渐变按钮
  4. SpringCloud+Feign环境下文件上传与form-data同时存在的解决办法(2)
  5. WCF服务端开发和客户端引用小结
  6. js获取子节点和修改input的文本框内容
  7. 解决wordpress上传文件出现http错误问题
  8. 第 15 章 位操作(fields)
  9. January 26th, 2018 Week 04th Friday
  10. &lt;20190103&gt;别傻了,一些 新的技术注定只适合新人