python - 如何在 Odoo 中从产品模板属性行创建产品变体?

标签 python python-2.7 odoo odoo-10

我正在使用 Odoo 10,并且我创建了一组产品模板。由于我启用了产品变体,因此每个产品模板都生成了一个产品变体。然后,我导入了一个 CSV 文件,该文件将产品属性行添加到产品模板中。它运行良好,因为产品模板现在具有各自的属性行。

由于我导入了这些属性行而不是手动创建它们,因此它们没有生成任何产品变体。例如,我已导入属性行 Size 以及模板 SML 值>T 恤。我希望 Odoo 删除单个 T-Shirt 变体并生成变体 T-shirt ST-shirt MT -shirt L(这是向模板添加属性或属性值时的行为),但它什么也没做。

所以我尝试通过代码生成它们,我正在使用 shell。首先,我搜索我创建的模板。将它们存储在名为 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 的产品变体会有问题,但它与其他变体具有类似的数据。

有人知道如何创建产品变体(通过代码或界面)吗?

最佳答案

已解决。

问题在于导入文件错误,因为它多次将相同的产品属性行与同一产品模板关联。

例如,产品模板T 恤有两行尺寸

一旦我更正了输入文件的重复项,我就可以使用 shell 毫无问题地执行 create_variant_ids

顺便说一句,如果您不想通过 shell 执行此操作,则在导入产品属性行后通过界面重新计算变体的解决方法是存档您的产品模板,然后取消存档。

如果您过滤以仅查看要更新的产品模板,则速度非常快,在 TreeView 中显示并选择所有模板,单击操作 > 存档,然后添加搜索过滤器< em>已取消归档到您的,再次选择它们并单击操作 > 取消归档。此过程会重新计算所有变体,从而根据导入的产品属性行创建新的变体。

关于python - 如何在 Odoo 中从产品模板属性行创建产品变体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54109074/

相关文章:

python - 在 OpenERP 中调用另一个表单的方法返回值

python - 在 pandas DataFrame 上使用 Python 中的 R lm 函数

python - 从嵌套字典创建文件树 | Python 2.7

python - pip安装pyaudio错误cl.exe失败

到目前为止的 Python 字符串?

javascript - 继承odoo中web模块的view_form.js

python - Django fixtures 和 OneToOneField

python - 解析 Openweather API Python

jquery - Django-cors-headers 不工作

python - unicode 和 python 请求发生了一些有趣的事情