Два способа приблизиться к этому, кажется, что вы могли бы изменить эти поля, чтобы они были связанными полями, если они только когда-либо будут содержать значения из связанной записи (liability_partner).
resp_civility1 = fields.Char("Field Label", related="responsible_partner.title.name")
Редактирование этого поля также приведет к редактированию связанной записи, поэтому оно не будет подходящим, если вы хотите вообще изменить это значение, или вы можете установить его только для чтения, если не хотите, чтобы оно было отредактировано отсюда.
Другим способом сделать это было бы переопределить метод записи, это запишет значения во время сохранения записи и будет выглядеть так:
@api.multi
def write(self, vals):
res = super(ModelName, self).write(vals)
if vals.get('nursery_morning') or vals.get('nursery_evening') or vals.get('responsible_partner'):
if res.nursery_morning or res.nursery_evening:
if res.responsible_partner:
if not res.resp_civility1 and not res.resp_name1 and not res.resp_cp1 and not res.resp_num1 \
and not res.resp_address1 and not res.resp_town1 \
and not res.resp_phone1 and not res.resp_phonemobile1:
res.resp_civility1 = res.responsible_partner.title.name
res.resp_name1 = res.responsible_partner.name
res.resp_cp1 = res.responsible_partner.zip_id.name
res.resp_num1 = res.responsible_partner.street_number_id.name
res.resp_address1 = res.responsible_partner.street_id.name
res.resp_town1 = res.responsible_partner.city_id.name
res.resp_phone1 = res.responsible_partner.phone
res.resp_phonemobile1 = res.responsible_partner.mobile
return res
Сначала будет вызван метод записи модели, затем он проверит, записываются ли три поля, и если это так, он запустит ту же логику из вашего метода onchange. Замените ModelName на то, что вы назвали своим классом модели.