Odoo中的“稀疏字段”类型支持被移到了单独的模块里了
-
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 -
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@digitalsatori 你好,这个具体怎么使用呢,
data字段包含所有字段数据吗,
data字段改变值,会更改其他字段的值吗 -
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数据。
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