首页 > 解决方案 > 在关系字段odoo 10的计算中检索字段值

问题描述

我想在一个Many2one字段中检索一个模型的记录的所有值。不知道用电脑能不能。

我的班级我想恢复价值:

class ResPartner_school(models.Model):

    _name = 'ecole.partner.school'
    _order = 'id desc'

    school_name = fields.Many2one(comodel_name="ecole.establishment.webservice",
                              string="Etablissement Scolaire",
                               default=1)
    school_level = fields.Many2one(comodel_name="ecole.establishment.webservice",
                               string="Niveau Scolaire",
                               compute="_get_level")

我的另一堂课:

class SchoolEstablishmentWebServices(models.Model):

    _name = 'ecole.establishment.webservice'
    _rec_name = "establishment_name"

    establishment_name = fields.Many2one(comodel_name="horanet.school.establishment", string="Etablissement Scolaire")
    id_establishment = fields.Char(string='idEtablissement')
    grade_name = fields.Many2one(comodel_name="horanet.school.grade", string="Niveau Scolaire")
    id_class = fields.Char(string='idClasse')

我在课堂上的职能ResPartner_school

    @api.multi
    def _get_level(self):
        school_level = self.school_name.grade_name

        return school_level

如何从grade_name类的字段中检索所有值SchoolEstablishmentWebServices

标签: pythonodoo

解决方案


显示“所有”数据(取决于有多少数据)的一种解决方案是覆盖name_get()具有两个变体的模型。

  1. 基于变体的上下文name_get()

首先覆盖name_get()模型ecole.establishment.webservice

class SchoolEstablishmentWebServices(models.Model):

    _name = 'ecole.establishment.webservice'

    @api.multi
    def name_get(self):
        res = []
        for webservice in self:
            if 'full_name' in self.env.context:
                res.append((webservice.id, webservice.get_full_name()))
            else:
                res.append((webservice.id, webservice.establishment_name))
        return res

    def get_full_name(self):
        #  example logic
        self.ensure_one()
        full_format = "{establishment}, {grade}"
        return full_format.format(
            establishment=self.establishment_name, grade=self.grade_name)

然后您需要将值full_name放入上下文中。您可以将它添加到字段本身,这不会那么好。最好将该值放入菜单操作的上下文中,该操作用于显示您的'ecole.partner.school'条目。

    <record id="my.list.action.for.school" model="ir.actions.act_window">
        <field name="name">my.action</field>
        <!-- and so on -->
        <field name="context">{'full_name': 1}</field>
    </record>
  1. 非基于上下文的变体 -> 它与变体 1 相同,根本不使用上下文。它将是系统范围的,不仅在您想要的位置。这是更简单的变体。

推荐阅读