Как подать домен на реляционное поле odoo? - PullRequest
0 голосов
/ 12 декабря 2018

Вот мой sale.order.line модуль, я делаю некоторые модификации enter image description here

Я хочу применить домен к продукту, чтобы не весь продукт отображался только продуктами в контракте Ligneполе, например:

enter image description here

Здесь, в моей строке Contrat, у меня есть только один продукт, поэтому в строках Заказ на продажу только этатовар (артикул) должен быть показан

1 Ответ

0 голосов
/ 12 декабря 2018

Используйте событие onchane для этого в своем sale.order.line

   @api.onchange('contrat_id')
   def set_domain(self):
         # force the user to reselect the producg if he changes the contrat line
         self.product_id = False
         if self.contrat_id :
                 return {'domain': {'product_id': [('id',  'in', self.contrat_id.product_ids.ids)]}}
         else: 
                 # remove the domain if no contrat is selected
                 return {'domain': {'product_id': []}}

Я использую свой телефон, извините, если я допустил синтаксическую ошибку, но я надеюсь, что вы поняли

Редактирует

Хорошо, в вашей модели контракта у вас нет поля многие2 многие для модели продукта, как я думал, вместо этого у вас есть поле одно2 многих ligne contract

Итак, давайте предположим, чтоимя этого поля равно ligne_ids, в этом отношении one2many существует поле many2one для модели продукта, скажем, его имя product_id.

Используйте силу сопоставления для извлечения в одну строкувсе идентификаторы продуктов в контракте приведены ниже.

       #     many2one ->   one2many       -> mapped('many2one') this will collect of the records without duplication from the o2m field.
       #     contract ->  contract lignes -> products
   self.contrat_lignes_id.ligne_ids.mapped('product_id').ids

Надеюсь, это поможет вам

...