我写了一个向导,表单视图应该显示一个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')
答案 0 :(得分:5)
可能存在问题:
res['details'] = **[(6, False, dws)]**
您的详细信息字段是One2many字段,[(6,0,[IDS])]适用于Many2many。 在您的情况下,您不需要为详细信息字段分配任何内容;它是One2many,所以它是自动的,因为你已经创建了相应的Many2one记录(dw)。
对于many2many字段,预计会有一个元组列表。这是清单 被接受的元组和相应的语义
(0,0,{values})链接到需要创建的新记录 使用给定值字典
(1,ID,{values})使用id = ID更新链接记录(写入 值就可以了)
(2,ID)删除并删除id =的链接记录 ID(调用取消链接ID,完全删除对象,以及 它的链接也是如此)
(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]
(0,0,{values})链接到需要创建的新记录 使用给定值字典
(1,ID,{values})使用id = ID更新链接记录(写入 值就可以了)
(2,ID)删除并删除id =的链接记录 ID(调用取消链接ID,完全删除对象,以及 它的链接也是如此)
示例:[(0,0,{'field_name':field_value_record1,...}),(0,0, {'field_name':field_value_record2,...})]
此外,如果您希望其他人能够轻松理解您的代码,请尝试关注Many {/ 3}}字段:
One2Many和Many2Many字段应始终以 _ids 作为后缀(例如:sale_order_line_ids)
Many2One字段的后缀应为 _id (例如:partner_id,user_id,...)