Как создать отношения One2one в Odoo 8?

У меня есть два набора данных, которые демонстрируют отношение один к одному.

Я не могу объединить два набора данных, потому что:

  1. Отдельные записи могут присутствовать только в наборе А, только в наборе В или и в наборе А, и в наборе В; а также
  2. Связь между записями в наборе A и наборе B является временной, т. е. записи могут быть связаны и разъединены; а также
  3. Данные в наборе A обрабатываются иначе, чем данные в наборе B; а также
  4. Существуют внешние архитектурные ограничения.

Когда запись в наборе 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, но я не уверен, что это можно сделать чисто.


person Monica For CEO    schedule 26.09.2015    source источник


Ответы (1)


В вашем случае в основном отношение «один к одному» недоступно в Odoo 8.0, его полностью устарела версия 7.0 или более поздняя версия в Odoo (формально OpenERP).

поэтому, пожалуйста, мой совет: не использовать отношение «один к одному», просто используйте его как many2one вместо этого и сделайте так, чтобы установить локальный в соответствии с вашими потребностями.

Я надеюсь, что мой ответ может быть полезен для вас :)

person DASADIYA CHAITANYA    schedule 07.02.2016