跳转至内容
  • Selection字段的ondelete属性

    Odoo 培训 odoo技术 selection字段
    1
    0 赞同
    1 帖子
    1k 浏览
    D
    当我们在自己模块里继承了某个模型并且通过selection_add对这个模型的Selection类型字段添加了新的选项。系统中的记录也选择了我们定义的选项。然后,由于某些情况,我们需要卸载这个模块,那么这些选择了我们新的选项的记录这时候应该怎么处理,尤其是如果这个选项类型的字段还是“Required"的字段,那就更会引起错误了。 如fields.Many2one字段一样,为了处理fields.Selection出现上诉的问题,我们也要为这个字段添加ondelete属性。ondelete属性对应一个python字典。 当该字段的required=True时,ondelete属性是必须设置的,并且不能其值设置为null 比如: my_selection = fields.Selection(selection_add=[ ('pikachu', "Pikachu"), ('eevee', "Eevee"), ], ondelete={'pikachu': 'default', 'eevee': 'set bar'}) 从上面的例子可以看到,这个ondelete字典的key是新添的选项,其值就是当新添的选项删除时(模块卸载时)需要处理的动作,这些动作包括: 'null' --默认值,当对应选项删除时会将该字段的值设为False。如上所诉,当该字段的required=True时ondelete不能使用这个动作。 'cascade' -- 所有选择当前选项的记录,当选项被删除时,记录一并被删除。 'default' -- 选择该选项的所有记录,当选项被删除时,该字段恢复为默认值。 'set ' -- 选择该选项的所有记录,当选项被删除时,该字段的值设为这里的设定值,这里的设定值必须有效存在。 <callable> -- 可以定义一个方法来返回结果,这个函数只有一个唯一参数对应所有包含该选项的记录。
  • 1 赞同
    1 帖子
    1k 浏览
    D
    我们知道Odoo的Selection字段的选项值为包含多个元组的一个列表,其中每个元组包含两个字符串成员,第一个成员为内部保存值,第二个用来界面显示,比如 class TestModel(model.Model): _name = 'test.model' myselection = fields.Selection([('a', 'A'), ('b', 'B')], string='MySelection') 当在新的模块里需要继承修改这个Selection字段的选项时,我们可以使用selection_add, 比如: class TestModel(model.Model): _inherit = 'test.model' myselection = fields.Selection(selection_add=[('c', 'C')]) 问题是这样的继承得到的结果是[('a', 'A'), ('b', 'B'), ('c', 'C')],新添加的选项在列表的尾端。那有没有办法指定新添加选项在列表中的位置呢?在Odoo13以后实际上我们可以在选项值后面添加由单个成员组成的元组来确认新选项的插入位置,比如上例中: selection_add = [('c', 'C'), ('b',)] > result = [('a', 'A'), ('c', 'C'), ('b', 'B')]