Одна запись в поле Many2one, имеющая еще несколько записей в поле Many2one в Odoo

#python #api #odoo #odoo-11 #zohobooks

#python #API #odoo #odoo-11 #zohobooks

Вопрос:

Используя запросы python, я запросил форму API Zoho:

теги = requests.get(‘https://books.zoho.com/api/v3/setting/tags?organization_id=xxamp;authtoken=xxx ‘).json()

которые возвращают эти данные:

  "reporting_tag": {
    "tag_id": "1717893000000000335",
    "tag_name": "division",
    "associated_with": "item",
    "is_active": true,
    "status": "active",
    "tag_options": [
        {
            "tag_option_id": "1717893000000123005",
            "tag_option_name": "A",
            "is_active": true,
            "status": "active"
        },
        {
            "tag_option_id": "1717893000000123003",
            "tag_option_name": "B",
            "is_active": true,
            "status": "active"
        },
        {
            "tag_option_id": "1717893000000123007",
            "tag_option_name": "C",
            "is_active": true,
            "status": "active"
        }
    ]  
  

исходя из приведенного выше результата, мне нужно сохранить (tag_name) и его (tag_option_name). API может выдавать сотни имен тегов и их tag_name_options.

пока я определил поле Many2one для хранения только тега_name:

x_tag_name = поля.Many2one(‘zoho.tags’, строка=»Имя тега»)

итак, что я хочу сделать, это когда я выбираю tag_name, все его tag_option_name должны отображаться в другом поле Many2one. Аналогично тому, как у одного родителя есть несколько дочерних элементов. Я не знаю, возможно ли это или нет, я надеюсь, вы можете помочь мне выполнить аналогичный сценарий.

ZohoTags класса (модели.Модель):

   _name = 'zoho.tags'

  name = fields.Char(string="Tags") 
  tag_options = fields.Char(string='Options')
  tag_id = fields.Char(string="Tag Id")

  @api.multi
  def tags_get(self):
      token = ''  
      org_id = ''

      setting_values = self.env['ir.config_parameter'].search([])
      for keys in setting_values:
        if keys.key == 'account.zoho_authtoken_module':
           token = keys.value
           print(keys.value)
        if keys.key == 'account.zoho_organization_module':
           org_id = keys.value
           print(keys.value)


      tags = requests.get('https://books.zoho.com/api/v3/settings/tags?organization_id=xxxamp;authtoken=xxx').json()
      for data in tags['reporting_tags']:
        tag_name = '%s' % (data['tag_name'])
        tag_ids = '%s' % (data['tag_id'])
        self.env.cr.execute("INSERT INTO zoho_tags (name, tag_id) VALUES ('%s', '%s')" % (tag_name, tag_ids))
        self.env.cr.commit()
        print(tag_name)
  

строка тегов класса (models.Модель):

   _name = 'zoho.tags.line'

  x_tag_name = fields.Many2one('zoho.tags', string='Analytic Account')
  x_tags_options = fields.Char(string='Tags Option', related="x_zoho_tags.tag_options")
  rules_id = fields.Many2one('hr.salary.rule')
  

Комментарии:

1. У вас уже есть модель zoho.tags.name для этой цели? Не могли бы вы добавить код, в котором вы создаете zoho.tags записи? Вот где мог бы начать ответчик 🙂

2. У меня нет zoho.tags.name модуль ,, У меня есть zoho.tags и zoho.tags. строка . Я отредактировал свой вопрос и добавил код

Ответ №1:

Да, ваша цель, безусловно, достижима.

итак, что я хочу сделать, это когда я выбираю tag_name, все его tag_option_name должны отображаться в другом Many2one

Ваша tag_option_name , давайте предположим, что модель для этих данных zoho.tags.line , будет иметь Many2one отношение tag_id к zoho.tags , а не наоборот. zoho.tags будет иметь обратную One2many связь tag_option_ids с zoho.tags.line , с inverse_key значением tag_id . Таким образом, для каждой zoho.tags записи вы получите несколько zoho.tags.line записей из поля tag_option_ids , которые могут быть показаны в tree/list представлении формы.

   _name = 'zoho.tags'

  name = fields.Char(string="Tags") 
  tag_option_ids = fields.One2many(zoho.tags.line, tag_id, string='Options')
  tag_id = fields.Char(string="Tag Id")



  _name = 'zoho.tags.line'

  tag_id = fields.Many2one('zoho.tags', string='Analytic Account')
  x_tags_options = fields.Char(string='Tags Option', related="x_zoho_tags.tag_options")
  rules_id = fields.Many2one('hr.salary.rule')