【问题标题】:Odoo 11 rewrite copy function to add extra fieldsOdoo 11 重写复制功能以添加额外字段
【发布时间】:2017-11-23 09:34:39
【问题描述】:

我制作了自定义模块,将字段添加到 product.template 表单视图(库存、销售、仓库中的产品),当我尝试这样做时,这些字段不会与产品重复。 因此,我正在尝试继承和重写该模块的函数副本

我的代码:

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

    @api.onchange('attribute_set_id')
    def _onchange_attributes(self):
       # SOME CODE HERE

    @api.one
    def copy(self, default=None):
        default = dict(default or {})
        default.update({
            'weight': float(43),
        })
        return super(ProductTemplate, self).copy(default)

这些给了我错误:

  ...
  File "/var/www/.local/share/Odoo/addons/11.0/sync2ba2/models/sync2ba_mob.py", line 89, in copy
    return super(ProductTemplate, self).copy(default)
NameError: name 'ProductTemplate' is not defined

我还尝试了不同的名称和类型,例如 product.template、product_template、'product.template'、[product.template]。

我尝试将类的名称更改为 ProductTemplate,但出现错误:

  ...
  File "/usr/local/lib/python3.5/dist-packages/odoo-11.0+e.20171006-py3.5.egg/odoo/models.py", line 3833, in <lambda>
    @api.returns('self', lambda value: value.id)
AttributeError: 'list' object has no attribute 'id'

我不确定该错误是来自复制功能还是其他原因。无论哪种方式,我都需要一些帮助来弄清楚我做错了什么。这是 Odoo 11 企业。谢谢。

【问题讨论】:

    标签: python-3.x openerp odoo-10 odoo-11


    【解决方案1】:

    将您的类名更改为 ProductTemplate 并使用 @api.multi 而不是 @api.one

    class ProductTemplate(models.Model):
          _inherit= 'product.template'
    
          @api.onchange('attribute_set_id')
          def _onchange_attributes(self):
             # SOME CODE HERE
    
          @api.multi
          def copy(self, default=None):
              default = dict(default or {})
              default.update({'weight': float(43)})
              return super(ProductTemplate, self).copy(default)
    

    【讨论】:

    • 非常感谢@senthilnatang。就是这样:D
    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多