Как создать варианты продукта из строк атрибутов шаблона продукта в Odoo?

1

Я использую Odoo 10, и я создал группу шаблонов продуктов. Поскольку у меня включены варианты продукта, каждый шаблон продукта сгенерировал вариант продукта. Затем я импортировал файл CSV, который добавляет строки атрибутов продукта в шаблоны продукта. Это работало хорошо, поскольку шаблоны продуктов теперь имеют свои соответствующие атрибуты.

Так как я импортировал эти строки атрибутов вместо того, чтобы создавать их вручную, они не создали вариант продукта. Например, я импортировал строку атрибута Размер со значениями S, M, L для шаблона футболки. Я ожидал, что Odoo удалит один вариант футболки и сгенерирует варианты футболки S, футболки M и футболки L (это поведение при добавлении атрибута или значения атрибута в шаблон), но это Ничего не сделал.

Поэтому я пытаюсь сгенерировать их с помощью кода, для этого я использую оболочку. Сначала я ищу шаблоны, которые я создал. Как только я create_variant_ids их в переменной с именем templates, я выполняю create_variant_ids для набора записей шаблонов:

>>> templates = self.env['product.template'].search([('create_date', '>=', '2019-01-06 00:00:00')])
>>> templates.create_variant_ids()

Результат таков:

2019-01-09 10:33:00,993 2775 INFO trivi_v10 odoo.models.unlink: User #1 deleted product.product records with IDs: [1052]
2019-01-09 10:33:01,782 2775 INFO trivi_v10 odoo.models.unlink: User #1 deleted product.product records with IDs: [1061]
2019-01-09 10:33:02,573 2775 INFO trivi_v10 odoo.models.unlink: User #1 deleted product.product records with IDs: [1054]
2019-01-09 10:33:03,353 2775 INFO trivi_v10 odoo.models.unlink: User #1 deleted product.product records with IDs: [1055]
2019-01-09 10:33:04,166 2775 INFO trivi_v10 odoo.models.unlink: User #1 deleted product.product records with IDs: [1056]
2019-01-09 10:33:05,000 2775 INFO trivi_v10 odoo.models.unlink: User #1 deleted product.product records with IDs: [1057]
2019-01-09 10:33:05,828 2775 INFO trivi_v10 odoo.models.unlink: User #1 deleted product.product records with IDs: [1058]
2019-01-09 10:33:06,621 2775 INFO trivi_v10 odoo.models.unlink: User #1 deleted product.product records with IDs: [1053]
2019-01-09 10:33:07,438 2775 INFO trivi_v10 odoo.models.unlink: User #1 deleted product.product records with IDs: [1059]
2019-01-09 10:33:08,241 2775 INFO trivi_v10 odoo.models.unlink: User #1 deleted product.product records with IDs: [1060]
2019-01-09 10:33:09,051 2775 INFO trivi_v10 odoo.models.unlink: User #1 deleted product.product records with IDs: [1051]
2019-01-09 10:33:09,841 2775 INFO trivi_v10 odoo.models.unlink: User #1 deleted product.product records with IDs: [956]
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/opt/odoo/odoo_10/src/linked/product/models/product_template.py", line 403, in create_variant_ids
    'attribute_value_ids': [(6, 0, variant_ids.ids)]
  File "/opt/odoo/odoo_10/src/linked/product/models/product.py", line 322, in create
    product = super(ProductProduct, self.with_context(create_product_product=True)).create(vals)
  File "/opt/odoo/odoo_10/src/linked/mail/models/mail_thread.py", line 228, in create
    thread = super(MailThread, self).create(values)
  File "/opt/odoo/odoo_10/src/oca/OCB/odoo/models.py", line 3847, in create
    record = self.browse(self._create(old_vals))
  File "/opt/odoo/odoo_10/src/oca/OCB/odoo/models.py", line 4002, in _create
    self._validate_fields(vals)
  File "/opt/odoo/odoo_10/src/oca/OCB/odoo/models.py", line 1078, in _validate_fields
    check(self)
  File "/opt/odoo/odoo_10/src/linked/product/models/product.py", line 310, in _check_attribute_value_ids
    raise ValidationError(_('Error! It is not allowed to choose more than one value for a given attribute.'))
ValidationError: (u'Error! It is not allowed to choose more than one value for a given attribute.', None)

Я думал, что вариант продукта с ID 956 будет иметь что-то не так, но он имеет данные, аналогичные остальным вариантам.

Кто-нибудь знает, как создавать варианты продукта (через код или интерфейс)?

Теги:
odoo
python-2.7
odoo-10

2 ответа

1

Решаемые.

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

Например, было две строчки Size для шаблона продукта T-shirt.

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

Кстати, если вы не хотите делать это с помощью оболочки, обходной путь для пересчета вариантов через интерфейс после импорта строк атрибутов продукта - это заархивировать шаблоны продуктов и затем разархивировать их.

Это очень быстро, если вы фильтруете, чтобы видеть только шаблоны продуктов для обновления, показывать и выбирать их все в древовидном представлении, нажмите "Действие"> "Архивировать", затем добавьте поисковый фильтр "Unarchived" к вашему, выберите их все снова и нажмите Действие> Разархивировать. Этот процесс пересчитывает все варианты и таким образом создает мои новые из импортированных строк атрибутов продукта.

0

Спасибо, что поделился. У меня похожая проблема. Не могли бы вы поделиться шаблоном файла, который вы использовали для импорта?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню