odoo的many2many和one2many字段给默认值

odoo的x2many字段由于赋值方式比较特殊,所以不能像普通字段一样直接给默认值,需要返回一个列表里面嵌套列表结构的数据。
1.先看many2many和one2many字段的赋值方式:
many2many

(0,0,{values}) 根据values里面的信息新建一个记录。

(1,ID,{values})更新id=ID的记录(写入values里面的数据)

(2,ID) 删除id=ID的数据(调用unlink方法,删除数据以及整个主从数据链接关系)

(3,ID) 切断主从数据的链接关系但是不删除这个数据

(4,ID) 为id=ID的数据添加主从链接关系。

(5) 删除所有的从数据的链接关系就是向所有的从数据调用(3,ID)

(6,0,[IDs]) 用IDs里面的记录替换原来的记录(就是先执行(5)再执行循环IDs执行(4,ID))

例子[(6, 0, [8, 5, 6, 4])] 设置 many2many to ids [8, 5, 6, 4]

one2many

(0, 0,{ values })根据values里面的信息新建一个记录。

(1,ID,{values}) 更新id=ID的记录(对id=ID的执行write 写入values里面的数据)

(2,ID) 删除id=ID的数据(调用unlink方法,删除数据以及整个主从数据链接关系)

2.根据上面的赋值方式可以发现,看如下示例:

@api.model
    def get_all_electric_vehicle(self):
        '''
        默认获取全部的列车
        '''
        electric_vehicle_ids = self.env['lintong.electric.vehicle'].search([])
        vals = []
        for item in electric_vehicle_ids:
            vals.append([4, item.id])
        return vals
electric_vehicle_ids = fields.Many2many('lintong.electric.vehicle',
                                            'production_notice_electric_rel',
                                            default=get_all_electric_vehicle,
                                            string='列车选择')

注意:不同于compute属性,default属性的函数必须定义在字段定义之前

Odoo中,可以通过Many2one字段Many2many字段传递值。这可以通过使用Odoo的特殊语法和API来实现。 具体方法如下: 1. 在Many2one字段对应的模型中,添加一个Many2many字段,用于存储传递的值。例如,我们在模型A中添加一个Many2many字段,用于存储传递给模型B的值。 ```python class ModelA(models.Model): _name = 'model.a' name = fields.Char(string='Name') value_ids = fields.Many2many(comodel_name='model.b', string='Values') ``` 2. 在Many2one字段对应的模板中,添加一个Many2many字段的下拉菜单,用于选择传递的值。这可以通过使用Odoo的特殊语法和API来实现。例如,我们在模板中添加一个下拉菜单,用于选择传递给模型B的值。 ```xml <field name="value_ids" widget="many2many_tags"/> ``` 3. 在Many2one字段对应的模型中,添加一个按钮,用于触发传递操作。按钮的onClick方法中,通过API获取Many2many字段的值,并将其传递给Many2one字段对应的记录中。例如,我们在模型A中添加一个按钮,用于触发传递操作。 ```python @api.multi def transfer_values(self): for record in self: values = record.value_ids.ids record.other_model_id.write({'many2many_field': [(6, 0, values)]}) ``` 在上述代码中,我们通过API获取Many2many字段的值,并将其传递给Many2one字段对应的记录中。 通过上述方法,我们可以实现Many2one字段Many2many字段传递值的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值