Заполнение элементов из родительского заказа на продажу в мастер

Моя цель - получить все элементы из родительской цитаты в окно мастера.

Я не знаю, правильно я это делаю или нет, но пока я могу получить все продукты из предложения и не понимаю, как заполнить их в моей строке предметов мастера.

Пример цитаты

Мастер этой цитаты

Я удаляю куски кода, которые не имеют значения.

    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')

person KushiNii    schedule 24.04.2018    source источник


Ответы (1)


Во-первых, если вы создаете мастер, скорее всего, вам следует использовать models.TransientModel, а не model.Model для ваших курсов.

class back_to_back_order(models.TransientModel):
    ...

Записи мастера не должны быть постоянными; они автоматически удаляются из базы данных через определенное время. Вот почему они называются временными.


Вы упомянули, что уже можете получить строки заказа на продажу в своем мастере, но не знаете, как заполнить строки обратного заказа данными.

One2many и Many2many используют специальный формат «команд» для управления набором записей, хранящихся в поле или связанных с ним.

Первоначально я нашел эти команды в другом ответе, но они также описаны в Документация.


Что касается вашего конкретного приложения, вы должны иметь возможность просто 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,
            })
person travisw    schedule 26.04.2018
comment
Бро, спасибо за ответ, за эти 3 дня, пока я ждал ответа, я решил проблему. В следующий раз я буду знать, как делать такие вещи) - person KushiNii; 27.04.2018