2016-03-27 2 views
1

Я создал новую модель «sale.order.category» для того, чтобы группа продажа Строки заказа в конкретных категориях (что позволяет отображать подытог и т.д.)Odoo 8: как автоматически связать поле Many2one с родительской моделью?

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> 

Мой вопрос: как я могу автоматически заполнить поле Order_ID с текущим продажам Идентификатор заказа, когда я создаю новую категорию по порядку Линии Дерево (внутри заказ клиента) ?

Большое спасибо, Max

ответ

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.

Однако этот вариант не будет работать хорошо:

  • Когда вы создаете новый заказ клиента, вам придется создавать свои категории до заказа клиента даже сохранен, так что нет никакой возможности значения order_id еще. По этой причине вы не можете сделать order_id, и вам придется снова установить его значение позже, или вам нужно будет сохранить свои заказы, прежде чем начинать добавлять категории.
  • У вас уже есть order_lines one2many в вашей модели sale.order.category. Поле order_id является избыточным с полем line_ids, потому что все линии предположительно принадлежат к одному и тому же порядку.

Простая альтернатива будет полностью опустить order_id поле (используйте lines_id[0].order_id, когда вам это нужно), или заменить его на related field, который будет автоматически вычисленной из линий (она будет принимать значение от первая строка заказа):

order_id = fields.Many2one('sale.order', related='line_ids.order_id', readonly=True) 

Что вы должны сделать, зависит от ваших требований, это трудно сказать, основываясь только на ваш вопрос.

Смежные вопросы