Python 如何在另一个模块中复制一个模块的值[ODOO]

Python 如何在另一个模块中复制一个模块的值[ODOO],python,module,copy,odoo,Python,Module,Copy,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),

我制作了一个自定义订阅模块

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')
当我从客户模块创建订阅时,它也会显示在订阅模块中,但当我在订阅模块中创建订阅时,它不会显示在客户模块中


我能在正确的方向上得到一些帮助吗?

您的问题是关于理解传递给多个one和One2many字段的参数

对很多人来说 在本报告中,目前声明如下:

类openerp.fields.manyOne(comodel\u name=None,string=None,**kwargs)

此类字段的值是大小为0(无记录)或1(单个记录)的记录集

参数

  • comodel\u name
    ——目标模型的名称(字符串)
  • auto_join
    ——在搜索该字段时是否生成联接(默认情况下为布尔值
    False
属性
comodel\u name
是必需的,相关字段或字段扩展除外

因此,
fields.manyOne
的第二个参数是该字段在接口中的名称。在旧的API中,我们可以看到()第三个参数是一个
auto\u-join
标志:

class many2one(_column):              
    # ...
    def __init__(self, obj, string='unknown', auto_join=False, **args):
因此,在给定的示例中,在指定many21时,应该删除第二个参数,并且只有两个参数

一个人 对于One2many,文档说明:

类openerp.fields.One2many(comodel\u name=None,inverse\u name=None,string=None,**kwargs)

一个是任何领域;该字段的值是
comodel_name
中所有记录的记录集,因此该字段
inverse_name
等于当前记录

参数

  • comodel\u name
    ——目标模型的名称(字符串)
  • inverse\u name
    ——在
    comodel\u name
    (字符串)中反向
    manyOne
    字段的名称
属性
comodel\u name
inverse\u name
是必需的,相关字段或字段扩展除外

因此,在本例中,需要第二个参数是正确的,但您选择的(
sub_id
)是错误的。对于
inverse\u name
,您必须在
comodel\u name
上选择一个
manyOne
字段,该字段将指向带有
One2many
的模型。因此,在您的实例中,
inverse\u name
应该是
cust\u id

结论 要建立从一个模型的
Many2one
字段到另一个模型的
One2many
字段的关系,
One2many
字段的
inverse\u 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')

如果您的代码不符合此要求,则不会在两个字段之间建立链接,并且每个模型字段都有独立的值。

您的意思是“合作伙伴模块”吗?没有显示客户模块。是的,我指的是使用合作伙伴模块的客户表单。我稍微调低了格式。另外,作为参考,如果问题上有语言标记,则该问题及其答案会自动获得该语言的语法突出显示。(因此,在本例中,您可以免费获得python高亮显示。:)谢谢!这正是我需要的。它正在工作