2017-11-23 12 views
3

カスタムモジュールからの余分なフィールドを持つ製品があります。私はコピー機能を書き直そうとしています。なぜなら、製品を複製しようとするといくつかの値が重複しないからです。重複したレコードにmany2oneフィールドの問題がありません

このコピー機能では、これらのフィールドを追加することができますが、元の製品フィールドからidsを追加しようとすると、その製品が複製された後に値が失われます。私はそれが理にかなっていると思う。

コード:

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あります。

enter image description here

問題:私はオリジナルのものに基づいて新しいレコードを作成することもできますが、問題は、これらの値の1は、製品のIDの値「product_tmpl_id」を必要とするmany2oneに依存していることです。だから、もし私が新製品のIDをまだ持っていないのであれば、どうすればこれらの価値を創り出すことができますか?それは現時点では重複していないからです。

以前は別の機能で私はレコードを作成し、そのIDを使用してこれらの値を更新しました。今は不可能です。

これを解決する方法はありますか?手動で作成する必要なしにすべてのレコードを複製できるようにする.copy()関数はありますか?

ありがとうございました。

これはodoo 11 enterpriseです。

答えて

4

IIUC製品を複製するときに、製品属性をコピーすることができます。

from odoo import fields, models 


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

    attribute_line_ids = fields.One2many(copy=True) 
+0

私はこれを試してみました、それが動作しませんでした:私はあなたがフィールドにTrueからattribute_line_idsproduct.templateの属性copyを変更していることを達成できると考えています。なにか提案を?私はまだ同じ行動をしています。 – Trody

+1

'product.template'の' copy'メソッドの 'default' dictの' attribute_line_ids'の値を変更していますか?あなたは私が説明した解決策でそれを行う必要はないはずです。私はそれをローカルでテストして、それは私のために働いています(製品属性は複製された時点でコピーされます)。 – Naglis

+0

うん、あなたは正しい。それは今働く。私は本当にあなたの助けに感謝します。それは私に頭痛を与えていた。 – Trody

関連する問題