Функция python для odoo 10 - PullRequest
       1

Функция python для odoo 10

0 голосов
/ 08 ноября 2018

У меня есть функция для автоматического заполнения многих полей с помощью декоратора api.onchange ().

@api.onchange('nursery_morning', 'nursery_evening', 'responsible_partner')
def retrieve_responsible_nursery(self):
    if self.nursery_morning or self.nursery_evening:
        if self.responsible_partner:
            if not self.resp_civility1 and not self.resp_name1 and not self.resp_cp1 and not self.resp_num1 \
                    and not self.resp_address1 and not self.resp_town1 \
                    and not self.resp_phone1 and not self.resp_phonemobile1:
                self.resp_civility1 = self.responsible_partner.title.name
                self.resp_name1 = self.responsible_partner.name
                self.resp_cp1 = self.responsible_partner.zip_id.name
                self.resp_num1 = self.responsible_partner.street_number_id.name
                self.resp_address1 = self.responsible_partner.street_id.name
                self.resp_town1 = self.responsible_partner.city_id.name
                self.resp_phone1 = self.responsible_partner.phone
                self.resp_phonemobile1 = self.responsible_partner.mobile

Эта функция работает, но я не хочу, чтобы поля менялись до тех пор, пока поля не будут сохранены в базе данных, а не раньше.

В настоящее время поля не изменяются после заполнения одного из перечисленных полей, но не сохраняются в базе данных

1 Ответ

0 голосов
/ 09 ноября 2018

Два способа приблизиться к этому, кажется, что вы могли бы изменить эти поля, чтобы они были связанными полями, если они только когда-либо будут содержать значения из связанной записи (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 на то, что вы назвали своим классом модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...