Odoo 中文社区

    • 注册
    • 登录
    • 搜索
    • 版块
    • 标签
    • 热门
    • 用户
    • 群组

    Odoo中文社区可以通过以下两个域名访问:shine-it.net , odoo.net.cn

    由于系统升迁的原因,本论坛部分较早期的内容存在格式和链接损坏失效的问题,并非本论坛系统本身的缺陷,望谅解

    本社区没有维护任何QQ群讨论组,任何与本社区同名的QQ群讨论组的言论与本社区无关!

    开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

    如果您登录系统碰到问题,请在微信公众号留言:

    下拉框搜索时,如果用首拼过滤?[已解决]

    Odoo 新手求助
    4
    7
    4849
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • E
      eric2017 最后由 eric2017 编辑

      在档案中添加了首拼字段,用于保存name的首拼。
      在tree视图中,已经可以通过首拼过滤查询结果;那么,如何在对应的下拉框中实现首拼过滤的功能呢?

      1 条回复 最后回复 回复 引用 0
      • digitalsatori
        digitalsatori 管理员 最后由 digitalsatori 编辑

        override name_search方法, 加入对首拼字段的搜索。
        加首拼字段的解决方法不够自动化,应该可以对汉字解析其拼音然后做搜索。

        【上海先安科技】(tony AT openerp.cn)

        E 1 条回复 最后回复 回复 引用 0
        • E
          eric2017 @digitalsatori 最后由 编辑

          @digitalsatori 非常感谢,已按您的指点完美实现该功能。我之所以添加一个字段来存储首拼,是为了提高查询效率。
          我目前还不会写基类,等我学会了,就不存在自动化的问题,直接继承即可
          关于继承,有2个问题:
          1.跨模块调用。
          2.如何在xml配置页面时,方便使用
          不过,这些问题在当前都还不重要,先学别的东西

          H 1 条回复 最后回复 回复 引用 0
          • H
            hui @eric2017 最后由 编辑

            @eric2017
            如何代码实现的,贴出来分享下🌼

            E 1 条回复 最后回复 回复 引用 0
            • E
              eric2017 @hui 最后由 编辑

              @1234567 假设档案类类名为A,名称字段为name,首拼字段为spell。算法如下:
              1.写设置首拼的代码
              获取汉字首拼的代码,参见:http://www.jb51.net/article/68715.htm
              将里面的方法,写到utils.py文件中,然后添加方法:

              def set_spell(values):
                  if values.has_key('name'):
                      values['spell'] = multi_get_letter(values['name'])
              

              2.在A中,重写write、create方法,并添加计算首拼的代码。例如:

                  @api.model
                  def create(self, values):
                      utils.set_spell(values)
                      return super(A, self).create(values)
              

              3.为在其他地方使用该档案A的下拉框,添加对搜索的支持。在A中继续添加代码:

                  @api.model
                  def name_search(self, name='', args=None, operator='ilike', limit=100):
                      args = args or []
                      domain = ['|', ('spell', operator, name), ('name', operator, name)]
                      recs = self.search(domain + args, limit=limit)
                      return recs.name_get()
              
              H 1 条回复 最后回复 回复 引用 0
              • H
                hui @eric2017 最后由 编辑

                @eric2017
                收到,谢谢,我也是新手,以后多多交流。

                1 条回复 最后回复 回复 引用 0
                • K
                  Kowky 最后由 编辑

                  此回复已被删除!
                  1 条回复 最后回复 回复 引用 0
                  • First post
                    Last post