跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • Light
  • 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

  • 默认(Flatly)
  • 不使用皮肤
折叠

Odoo 中文社区

  1. 主页
  2. 版块
  3. Odoo 新闻
  4. Odoo中的“稀疏字段”类型支持被移到了单独的模块里了

Odoo中的“稀疏字段”类型支持被移到了单独的模块里了

已定时 已固定 已锁定 已移动 Odoo 新闻
5 帖子 4 发布者 3.6k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • digitalsatoriD 离线
    digitalsatoriD 离线
    digitalsatori 管理员
    写于 最后由 编辑
    #1

    Odoo中有一个很特殊的字段类型:“稀疏字段” 和与之对应的"序列化字段“,估计没有人用到过,不过它真的一直是存在的。用法如下:

    class MySparseModel(models.Model):
        _name = 'Mymodel.sparse_test'
    
        data = fields.Serialized()
        boolean = fields.Boolean(sparse='data')
        integer = fields.Integer(sparse='data')
        float = fields.Float(sparse='data')
        char = fields.Char(sparse='data')
        selection = fields.Selection([('one', 'One'), ('two', 'Two')], sparse='data')
        partner = fields.Many2one('res.partner', sparse='data')
    

    这里我们首先定义了一个“序列化字段”,其实它就是一个普通的text字段,而后面所定义的各种类型的字段与普通字段的区别在于有一个sparse参数指向之前的序列化字段。
    后面这一系列字段就是所谓的“稀疏字段”。它并不会在数据库中创建对应的字段,而是其值会通过json序列化后存储到对应的“序列化字段”。通过名字,我们也能了解到这种字段的应用场景,就是“稀疏字段”的值大多数情况下都是空值,只有很少数的情况下会有值,单独在数据库中保留一个字段并不合理,所以可以讲非空的值序列化后存储到“序列化字段”内。

    好象还不错的想法,不过好像Odoo公司的人也没怎么用过这个类型的字段,所以它终于被移出了核心,放到了addons里,真有好这口的可以找sparse_fields这个模块,然后安装后使用。

    这是讲这个字段类型移出核心的提交:
    https://github.com/odoo/odoo/pull/15070

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

    S 1 条回复 最后回复
    0
    • mrshellyM 离线
      mrshellyM 离线
      mrshelly
      写于 最后由 编辑
      #2

      感觉还是挺用意思的字段....

      1 条回复 最后回复
      0
      • Y 离线
        Y 离线
        yangxunbo
        写于 最后由 编辑
        #3

        以后我觉得WEBSITE部分的开发可能还真用的上,不破坏原本ERP原则,只做为扩展WEB信息使用还是可以的!

        上海欧思特信息科技有限公司(OST)—技术,专业,求精,务实

        1 条回复 最后回复
        0
        • S 离线
          S 离线
          s545751009
          在 回复了 digitalsatori 最后由 编辑
          #4

          @digitalsatori 你好,这个具体怎么使用呢,
          data字段包含所有字段数据吗,
          data字段改变值,会更改其他字段的值吗

          1 条回复 最后回复
          0
          • digitalsatoriD 离线
            digitalsatoriD 离线
            digitalsatori 管理员
            写于 最后由 digitalsatori 编辑
            #5

            data字段包含了json的数据,其中的值对应的是其它字段的值。所以在上例中,我们可以跟平常一样操作model对象,比如:

            # 读取数据
            sparse_records=self.env['Mymodel.sparse_test'].search([])
            values = [(record.boolean, record.integer, record.float, ...) for record in sparse_records]
            # 赋值
            sparse_records[0].boolean = True
            sparse_records[0].char = 'Good'
            

            操作跟其它的模型没有一点区别。只是说在数据库中只有data一个字段。我们一般是不会去操作data字段的因为里面保存的是model的其它field的json数据。

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

            1 条回复 最后回复
            0

            • 登录

            • 没有帐号? 注册

            • 登录或注册以进行搜索。
            • 第一个帖子
              最后一个帖子
            0
            • 版块
            • 标签
            • 热门
            • 用户
            • 群组