我的目标是将所有项目从父引号转到向导窗口。
我不知道我这样做是否正确,但是现在我可以从报价中获取所有产品,并且不明白如何将它们填入我的向导项目行。
我删除了无关紧要的代码片段。
from odoo import fields, models, api
import logging
class back_to_back_order(models.Model):
_name = "back.to.back.order"
_description = "Back to Back Order"
line_ids = fields.One2many('back.to.back.order.line','back_order_id', 'Order Lines', required=True)
def get_items_from_quotation(self, context):
items = []
quotation_id = context['id']
current_quotation = self.env['sale.order'].search([('id','=',quotation_id)])
if quotation_id == current_quotation.id:
for line in current_quotation.order_line:
item = {
'product_id': line.product_id,
'qty': line.product_uom_qty,
'price': line.price_unit,
'subtotal': line.price_unit*line.product_uom_qty
}
items.append(item)
class back_to_back_order_line(models.Model):
_name = "back.to.back.order.line"
_description = "Back to Back Order"
product_id = fields.Many2one('product.product', 'Product')
back_order_id = fields.Many2one('back.to.back.order', 'Back Order')
qty = fields.Float('Quantity')
price = fields.Float('Unit Price')
subtotal = fields.Float('Subtotal')
答案 0 :(得分:0)
首先,如果您正在创建向导,那么您很可能应该使用models.TransientModel
而非model.Model
用于您的课程。
class back_to_back_order(models.TransientModel):
...
向导记录并不意味着持久;一段时间后,它们会自动从数据库中删除。这就是为什么它们被称为 transient 。
您提到您已经能够在向导中获得销售订单行,但您不确定如何使用数据填充背靠背订单行。
One2many和Many2many使用特殊的"命令"格式来操作存储在字段中/与字段相关联的记录集。
我最初在another answer上找到了这些命令,但Documentation也涵盖了这些命令。
至于您的具体应用,您应该只需create
back.to.back.order.line
个back_order_id
记录,只要您提供@api.multi
def get_items_from_quotation(self, context):
self.ensure_one()
b2b_line_obj = self.env['back.to.back.order.line']
quotation = self.env['sale.order'].browse(context['id'])
if quotation:
back_order_id = self.id
for line in quotation.order_line:
b2b_line_obj.create({
'back_order_id': back_order_id,
'product_id': line.product_id.id,
'qty': line.product_uom_qty,
'price': line.price_unit,
'subtotal': line.price_unit * line.product_uom_qty,
})
,就会将其关联起来。
[
{
"modDate": "2017-06-20"
},
{
"modDate": "2017-10-24"
},
{
"modDate": "2017-08-03"
}
]