2015-10-22 93 views
0

我做了一個自定義的訂閱模塊如何複製模塊的價值在另一個模塊[ODOO]

subscription.py

from openerp.osv import fields, osv 

class subscriptions(osv.osv): 
    _name = "subscriptions.sub" 
    _description = "subscriptions" 

    _columns = { 
     'sub_id': fields.integer('Subscription ID', size=10), 
     'cust_id': fields.many2one('res.partner','customer_id', 'Customer ID') 
    } 

partner.py

from openerp import fields, models 

class Partner(models.Model): 
    _inherit = 'res.partner' 

    customer_id = fields.Integer('Customer ID'), 
    subscription_id = fields.One2many('subscriptions.sub', 'sub_id', 'Subscription ID') 

當我創建訂閱從我的客戶模塊中它也顯示在訂閱模塊中,但是當我在訂閱模塊中創建訂閱時,它不顯示在客戶模塊中。

我可以在正確的方向得到一些幫助嗎?

+0

你的意思是「合作伙伴模塊」?沒有顯示客戶模塊。 – saulspatz

+0

是的,我的意思是使用合作伙伴模塊的客戶表單 – ruud

回答

0

你的問題是關於理解傳遞給Many2one和One2many字段的參數。

對於Many2one

documentation,以下是目前提出:

class openerp.fields.Many2one(comodel_name=None, string=None, **kwargs)

這樣的字段的值是大小爲0(沒有記錄)或一個記錄1(單個記錄)。

參數

  • comodel_name - 對象模型的名稱(字符串)
  • auto_join - 無論連接是通過在該領域的搜索產生的(布爾值,默認情況下False

屬性comodel_name是強制性的,除非是相關字段或字段擴展。

因此,fields.Many2one的第二個參數是該字段在界面中的名稱。而在舊的API,我們可以看到(in openerp/osv/fields.py)第三個參數是一個auto_join標誌:

class many2one(_column):    
    # ... 
    def __init__(self, obj, string='unknown', auto_join=False, **args): 

因此,在給定的例子中,你應該刪除第二個參數,只有指定many2one時有兩個參數。

對於One2many

對於One2many,文檔狀態:

class openerp.fields.One2many(comodel_name=None, inverse_name=None, string=None, **kwargs)

One2many字段;這個字段的值是comodel_name中的所有記錄的記錄集,使得字段inverse_name等於當前記錄。

參數

  • comodel_name - 目標模型的名稱(字符串)
  • inverse_name - 在comodel_name(string)的逆Many2one字段的名稱

屬性comodel_nameinverse_name是強制性的,除了相關字段或字段擴展的情況。

所以在這種情況下,你是對的,需要第二個參數,但你選擇的(sub_id)是錯誤的。對於inverse_name,您必須在comodel_name上選擇一個Many2one字段,該字段將指向具有One2many的模型。因此在你的例子中inverse_name應該是cust_id

結論

建立從模型的Many2one領域的關係,向另一種模式的One2many領域,One2manyinverse_name必須是Many2One領域的技術名稱,例如:

class ModelA(models.Model): 
    _name = 'model.a' 
    m2o_model_a = fields.Many2one('model.a') 

class ModelB(models.Model): 
    _name = 'model.b' 
    # inverse_name is set to the Many2one of ModelA which points to ModelB 
    o2m_model_a = fields.One2many('model.b', 'm2o_model_a') 

當你的代碼沒有遵循這個規則時,兩個字段之間沒有建立鏈接,並且你將爲每個模型字段提供獨立的值。

+0

徹底的答案。我淡化了格式。同樣供大家參考的是,如果問題上有語言標記,則該問題及其答案會自動爲該語言提供語法高亮顯示。 (所以在這種情況下,你可以免費獲得Python高亮:) :) – theB

+0

謝謝!這正是我需要的。現在正在工作 – ruud

相關問題