Odoo 8:如何自动将Many2one字段与父模型相关联?

时间:2016-03-27 17:05:52

标签: openerp

我创建了一个新模型'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字段?

非常感谢, 最大

1 个答案:

答案 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();
}

您应该做什么取决于您的要求,仅根据您的问题难以说出来。