如何在Odoo 8中创建One2one关系?

时间:2015-09-26 20:10:18

标签: postgresql odoo odoo-8 postgresql-9.4

我有两组展示一对一关系的数据。

我无法合并这两组数据,因为:

  1. 特殊记录可能仅存在于集合A中,仅存在于集合B中,或者既存在于集合A中,也存在于集合B中;和
  2. 集合A和集合B中的记录之间的关联是暂时的,这意味着记录可以关联起来并且可以解除关联;和
  3. 集合A中的数据的处理方式与集合B中的数据不同;和
  4. 存在外部架构限制。
  5. 当集合A中的记录与集合B中的记录相关联时,我想链接这两个记录。链接记录时,关系必须是一对一的。 我如何保证这种关系是一对一的关系?

    以下代码似乎很接近,但我不熟悉使用Odoo,并且不确定如何分析这种方法是否能保证一对一的关系。

    import openerp
    
    class A(openerp.models.Model):
    
      _name = 'set.a'
    
      _sql_constraints = [
        ('set_b_id', 'unique("set_b_id")', 'Field set_b_id must be unique.'),
      ]
    
      # Constrained to be unique (see SQL above) which essentially changes
      # this end of the Many2one relationship to a One2one relationship. (The
      # other end of the relationship must also be constrained.)
    
      set_b_id = openerp.fields.Many2one(
        comodel_name='set.b',
      )
    
    class B(openerp.models.Model):
    
      _name = 'set.b'
    
      # Constrained to tie with either zero keys or one key (see function
      # below) which essentially changes this end of the One2many
      # relationship to a One2one relationship. (The other end of the
      # relationship must also be constrained.)
    
      set_a_id = openerp.fields.One2many(
        comodel_name='set.a',
        inverse_name='set_b_id',
      )
    
      @openerp.api.constrains('set_a_id')
      def _constrains_set_a_id(self):
        if len(self.set_a_id) > 1:
            raise openerp.exceptions.ValidationError('Additional linkage failed.')
    

    另一种方法可能是扩展openerp.fields以重新创建以前弃用的One2one关系,但我不确定是否可以干净利落地完成。

1 个答案:

答案 0 :(得分:1)

在你的情况下,基本上一对一的关系在Odoo 8.0中是不可用的,它在Odoo(正式的OpenERP)中完全弃用了一个7.0或更高版本。

所以请我的建议是,不要使用一对一的关系,只需将其用作many2one,然后根据需要设置本地。

我希望我的回答对您有所帮助:)。