odoo datamigration: введите один продукт в несколько прайс-листов через odoorp c на python - PullRequest
0 голосов
/ 17 апреля 2020

Я работаю над python сценарием импорта для импорта данных из листа xls в odooErp. В сценарии есть такая информация, как «имя», «если это список товаров» и (важно) для «цен» для различных прайс-листов (в данном случае p1-p4).

Я использую следующие версии: Odoo: Community v.12 python: v. 3.7.6 odoorp c: 0.7.0

Мой сценарий уже может найти продукты в odoodb, возьмите несколько xls -данных и записывает их в продукт в odoodb. Это такие поля, как имя, цена (которая является стандартной ценой), тип и т. Д. c. (стандартные звонки c). Но мне не удалось записать продукт в прайс-лист или назначить прайс-лист на продукт. Я не нашел никакой документации об этом шаге о том, как управлять синтаксисом для решения этой проблемы. Поэтому я попытался сделать это:

PricelistModel = odoo.env['product.pricelist']
  pricelist = PricelistModel.search([('name', '=', 'p1')], limit=1)
  if pricelist:
      p = PricelistModel.browse(pricelist)
      
      item = {
          'applied_on': '1_product',
          'product_tmpl_id': product['id'], #<-- this is int also tried string
          'compute_price': 'fixed',
          'fixed_price': float(row[3]) #<--- this is int also tried string
      }

      p.write({
          'item_ids':
              item 
      })

К сожалению, даже при отсутствии ошибок и получении «True» от функции этот вызов не успешен и ничего не делает.

Теперь мои вопросы:

  • Я хочу сделать больше с этим odoorp c, но документация является короткой и даже не царапает поверхность возможности, которые я мог себе представить, чтобы сделать. -> есть ли способ распечатать ответ, почему odoo не пишет в БД, чтобы я мог научиться «разговаривать» с odoo?

  • Кто-нибудь знает решение чтобы решить эту проблему?

Приветствия и большое спасибо за ваше время :) 1026 *

1 Ответ

1 голос
/ 18 апреля 2020

попробуйте этот код:

PricelistModel = odoo.env['product.pricelist']
pricelist = PricelistModel.search([('name', '=', 'p1')], limit=1)
if pricelist:
    item = {
        'applied_on': '1_product',
        'product_tmpl_id': product['id'], #<-- this is int also tried string
        'compute_price': 'fixed',
        'fixed_price': float(row[3]) #<--- this is int also tried string
    }

    # I assume the 'item' is a correct dictionary and the 'item_ids' is a One2many field, so you need an One2many special command

    p.write({
        'item_ids': [(0, False, item)] 
    })

вы можете прочитать https://www.odoo.com/documentation/13.0/reference/orm.html#create -обновление как ссылку для специальной команды One2many

...