函数python for odoo 10

2024-06-01 09:16:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个函数,可以用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

这个函数可以工作,但我不希望在字段保存到数据库之前更改字段。你知道吗

当前,一旦所列的某个字段被填充但未保存到数据库中,这些字段就不会更改


Tags: and函数nameselfapiidpartnerif
1条回答
网友
1楼 · 发布于 2024-06-01 09:16:22

有两种方法可以实现这一点,似乎可以将这些字段更改为相关字段,前提是它们只保存相关记录(负责的\u合作伙伴)中的值。你知道吗

resp_civility1 = fields.Char("Field Label", related="responsible_partner.title.name")

编辑此字段也会编辑链接的记录,因此如果您想更改此值,则不适合使用此字段;如果您不想从此处编辑此字段,则可以将其设置为只读。你知道吗

另一种方法是重写write方法,这将在保存记录时写入值,如下所示:

@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

这将首先调用模型的write方法,然后它将检查这三个字段是否正在被写入,如果是这样,它将从onchange方法运行相同的逻辑。将ModelName替换为已命名的模型类。你知道吗

相关问题 更多 >