Skip to content
  • Categories
  • Tags
  • Popular
  • Users
  • Groups
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (Flatly)
  • No Skin
Collapse

Odoo 中文社区

  1. Home
  2. Categories
  3. Odoo 新手求助
  4. 下拉框搜索时,如果用首拼过滤?[已解决]

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

Scheduled Pinned Locked Moved Odoo 新手求助
7 Posts 4 Posters 7.2k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • E Offline
    E Offline
    eric2017
    wrote on last edited by eric2017
    #1

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

    1 Reply Last reply
    0
    • D Offline
      D Offline
      digitalsatori
      管理员
      wrote on last edited by digitalsatori
      #2

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

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

      E 1 Reply Last reply
      0
      • D digitalsatori

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

        E Offline
        E Offline
        eric2017
        wrote on last edited by
        #3

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

        H 1 Reply Last reply
        0
        • E eric2017

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

          H Offline
          H Offline
          hui
          wrote on last edited by
          #4

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

          E 1 Reply Last reply
          0
          • H hui

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

            E Offline
            E Offline
            eric2017
            wrote on last edited by
            #5

            @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 Reply Last reply
            0
            • E eric2017

              @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 Offline
              H Offline
              hui
              wrote on last edited by
              #6

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

              1 Reply Last reply
              0
              • K Offline
                K Offline
                Kowky
                wrote on last edited by
                #7
                This post is deleted!
                1 Reply Last reply
                0

                Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                With your input, this post could be even better 💗

                Register Login
                Reply
                • Reply as topic
                Log in to reply
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes


                • Login

                • Don't have an account? Register

                • Login or register to search.
                • First post
                  Last post
                0
                • Categories
                • Tags
                • Popular
                • Users
                • Groups