Используйте событие 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
Надеюсь, это поможет вам