odoo one2many默认未设置

Ale*_*olo 3 python default openerp openerp-8

我写了一个向导,表单视图应显示一个one2many字段,其中的行取自context ['active_ids'].

我正确设置了one2many默认值,但是当表单打开时,没有显示任何行.

我错过了什么吗?(我为代码坏缩进道歉)

class delivery_wizard(models.TransientModel):
_name = 'as.delivery.wizard'

address = fields.Many2one('res.partner')
details = fields.One2many('as.delivery.detail.wizard', 'delivery')
carrier = fields.Many2one('delivery.carrier')

@api.model
def default_get(self, fields_list):
    res = models.TransientModel.default_get(self, fields_list)
    ids = self.env.context.get('active_ids', [])
    details = self.env['as.delivery.detail'].browse(ids)
    dwz = self.env['as.delivery.detail.wizard']
    dws = []
    for detail in details:
        dw = dwz.create({
            'production': detail.production_id.id,
            'quantity': detail.quantity,
            'actual_quantity': detail.quantity,
            'enabled': detail.production_id.state == 'done',
            'delivery': self.id,
        })
        dws.append(dw.id)

    res['details'] = [(6, False, dws)]
    res['address'] = details[0].delivery_id.address_id.id
    return res

class delivery_detail_wizard(models.TransientModel):
    _name = 'as.delivery.detail.wizard'

    production = fields.Many2one('as.production')
    quantity = fields.Float()
    actual_quantity = fields.Float()
    force = fields.Boolean()
    enabled = fields.Boolean()
    delivery = fields.Many2one('as.delivery.wizard')
Run Code Online (Sandbox Code Playgroud)

小智 5

问题可能出在那里:

res['details'] = **[(6, False, dws)]**
Run Code Online (Sandbox Code Playgroud)

您的详细信息字段是One2many字段,[(6,0,[IDS])]适用于Many2many.在您的情况下,您不需要为详细信息字段分配任何内容; 它是One2many,所以它是自动的,因为你已经创建了相应的Many2one记录(dw).

来自doc的小提醒:

  • 对于Many2many

对于many2many字段,预计会有一个元组列表.这是接受的元组列表,以及相应的语义

(0,0,{values})链接到需要使用给定值字典创建的新记录

(1,ID,{values})使用id = ID更新链接记录(在其上写入 )

(2,ID)删除并删除id = ID的链接记录(在ID上调用unlink,这将完全删除对象,以及指向它的链接)

(3,ID)使用id = ID剪切到链接记录的链接(删除两个对象之间的关系但不删除目标对象本身)

(4,ID)链接到id = ID的现有记录(添加关系)

(5)取消全部链接(如使用(3,ID)所有链接记录)

(6,0,[ID])替换链接ID列表(如使用(5)然后(4,ID)ID列表中的每个ID)

示例:[(6,0,[8,5,6,4])]将many2many设置为id [8,5,6,4]

  • 和One2many:

(0,0,{values})链接到需要使用给定值字典创建的新记录

(1,ID,{values})使用id = ID更新链接记录(在其上写入 )

(2,ID)删除并删除id = ID的链接记录(在ID上调用unlink,这将完全删除对象,以及指向它的链接)

示例:[(0,0,{'field_name':field_value_record1,...}),(0,0,{'field_name':field_value_record2,...})]

此外,如果您希望其他人可以轻松理解您的代码,请尝试遵循Many2One/One2many字段的odoo指南:

One2Many和Many2Many字段应始终具有_ids作为后缀(例如:sale_order_line_ids)

Many2One字段的后缀应为_id(例如:partner_id,user_id,...)