В дублирующейся записи отсутствует проблема с полем many2one

У меня есть продукты с дополнительными полями, которые поступают из пользовательского модуля. Я пытаюсь переписать функцию копирования, потому что в противном случае, когда я пытаюсь дублировать продукт, некоторые значения не дублируются.

Итак, в этой функции копирования мне удается добавить эти поля, но если я попытаюсь просто добавить идентификаторы из исходного поля продукта, это значение потеряется после дублирования продукта. Думаю, это имеет смысл.

Код:

class ProductTemplate(models.Model):
    _inherit= 'product.template'

    @api.multi
    def copy(self, default=None):
        default = dict(default or {})
        array_attribute_line_ids = []
        for value_id in self.attribute_line_ids.read([]):
            array_attribute_line_ids += [(4,value_id['id'])]
        print (array_attribute_line_ids)
        default.update({
            # General Information
            # 'standard_price': self.standard_price,

            # Variants > Attributes
            'attribute_line_ids': array_attribute_line_ids,
            # Purchase > Vendors

            # Inventory
            'weight': self.weight,
            'volume': self.volume,

            # Invoicing
            'property_account_income_id': self.property_account_income_id,
            'supplier_taxes_id': self.supplier_taxes_id, #NOT WORKING
            'property_account_expense_id': self.property_account_expense_id,
            'property_account_creditor_price_difference': self.property_account_creditor_price_difference,
        })
        return super(ProductTemplate, self).copy(default)

Вид: под рукой находится поле attribute_line_ids, показанное в нижней части изображения.

введите здесь описание изображения

Проблема: я мог бы создать новые записи на основе исходных, но проблема в том, что одно из этих значений зависит от множества2, которому требуется значение "product_tmpl_id", которое является идентификатором продукта. Итак, как я могу создать это значение, если у меня еще нет идентификатора нового продукта, потому что он не был продублирован в данный момент.

Ранее в другой функции я создал запись, а затем, используя ее идентификатор, обновил эти значения. Теперь это невозможно.

Есть ли способ решить эту проблему? Есть ли функция .copy(), которая позволяет мне дублировать все эти записи без необходимости их создания вручную?

Спасибо в плюс.

Это предприятие odoo 11.


person Trody    schedule 23.11.2017    source источник


Ответы (1)


IIUC вы хотите, чтобы атрибуты продукта копировались при дублировании продукта. Я считаю, что вы можете добиться этого, изменив поле attribute_line_ids в product.template атрибуте copy на True:

from odoo import fields, models


class ProductTemplate(models.Model):
    _inherit = 'product.template'

    attribute_line_ids = fields.One2many(copy=True)
person Naglis    schedule 23.11.2017
comment
Я пробовал это, и это не сработало. Любое предложение? У меня все еще такое же поведение. - person Trody; 24.11.2017
comment
Вы меняете значение attribute_line_ids в default dict в методе product.template copy? Поскольку вам не нужно делать это с решением, которое я описал. Я протестировал его локально, и он работает для меня (атрибуты продукта копируются при дублировании продукта). - person Naglis; 24.11.2017
comment
Да, ты был прав. Теперь это работает. Я действительно ценю твою помощь. Это вызывало у меня головную боль. - person Trody; 24.11.2017