我创建了一个新模型'sale.order.category',以便将特定子类别中的销售订单行分组(允许显示小计等)。
class SaleOrderCategory(models.Model):
_name = 'sale.order.category'
name = fields.Char('Name', required=True)
line_ids = fields.One2many('sale.order.line', 'category_id', 'Order Lines in this category')
order_id = fields.Many2one('sale.order', 'Order', required=True, readonly=True)
class SaleOrder(models.Model):
_name = 'sale.order'
_inherit = 'sale.order'
order_category_ids = fields.One2many('sale.order.category', 'order_id', 'Categories in this order', readonly=True, copy=True)
仅供参考,这是我的订单行树视图修改,以添加类别列:
<!-- adds a category column in the order lines list -->
<xpath expr="//field[@name='order_line']/tree/field[@name='name']" position="after">
<field name="category_id"/>
</xpath>
我的问题是:当我通过订单行树(在销售订单中)创建新类别时,如何使用当前销售订单ID自动填充order_id字段?
非常感谢, 最大
答案 0 :(得分:0)
初步评论:您的用例似乎与官方sale_layout
模块的作用有关,因此您可能希望在进一步操作之前先查看它。也许你可以扩展它而不是从头开始。
接下来,问题的最基本答案是,当您从视图中创建order_id
模型时,为sale.order.category
模型的context
字段传递默认值。您可以通过在您将从中创建值的many2one字段中设置具有适当默认值的<xpath expr="//field[@name='order_line']/tree/field[@name='name']" position="after">
<field name="category_id" context="{'default_order_id': parent.id}"/>
</xpath>
来实现此目的:
category_id
您的sale.order.line
字段已在parent
树视图中定义,因此sale.order
将动态引用Web客户端界面内的父记录,此处为order_id
。< / p>
但是这个选项效果不好:
order_id
没有可能的价值。因此,您无法使order_lines
成为必需,并且您必须稍后再次设置其值,或者您需要在开始添加类别之前保存订单。sale.order.category
模型中已有order_id
one2many字段。 line_ids
字段对order_id
字段是多余的,因为所有行都可能属于同一个订单。一个简单的替代将完全省略lines_id[0].order_id
字段(在您需要时使用order_id = fields.Many2one('sale.order', related='line_ids.order_id', readonly=True)
),或将其替换为related field将从行自动计算(它将从第一个订单行获取值):
if(conditiontrue)
{
}
else{
throw new Exception();
}
您应该做什么取决于您的要求,仅根据您的问题难以说出来。