Odoo的Many2one字段中的一个记录具有另一个记录

时间:2019-03-14 07:21:20

标签: python api odoo odoo-11 zohobooks

使用python请求,我已请求一个API表格Zoho:

tags = requests.get('https://books.zoho.com/api/v3/setting/tags?organization_id=xx&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_names及其tag_name_options。

到目前为止,我已经定义了Many2one字段来仅存储tag_name:

x_tag_name = fields.Many2one('zoho.tags',string =“ Tag Name”)

所以我要做的是当我选择一个tag_name时,其所有tag_option_name应该出现在另一个Many2one字段中。类似于一个有多个孩子的父母。我不知道是否有可能,希望您能帮助我做类似的情况。

ZohoTags类(models.Model):

  _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=xxx&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)

Class TagsLine(models.Model):

  _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 个答案:

答案 0 :(得分:0)

是的,您的目标肯定可以实现。

  

所以我想做的是,当我选择一个tag_name时,其所有tag_option_name应该出现在另一个Many2one

您假设您的tag_option_name的数据模型为zoho.tags.line,将与Many2one具有tag_id关系zoho.tagszoho.tagsOne2manytag_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') 中显示。

{{1}}