程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了从 Odoo 14 中的数据库检索数据大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决从 Odoo 14 中的数据库检索数据?

开发过程中遇到从 Odoo 14 中的数据库检索数据的问题如何解决?下面主要结合日常开发的经验,给出你关于从 Odoo 14 中的数据库检索数据的解决方法建议,希望对你解决从 Odoo 14 中的数据库检索数据有所启发或帮助;

我有一个要满足的要求是从数据库中获取一个值并在 UI 中显示,我们有一个应用程序,我们可以将“项目”分配给许多人,因此我必须在人员信息中显示一个字段当前分配给他/她的项目。

我正在虑创建一个函数来使用“search()”方法检索数据以获取所需的字段。

#for the moment i have added the variable in the class
project_name = fIElds.Char('Project name',compute='_compute_get_employee_project')

#this is the function i am building (trying)
@API.model
    def _compute_get_employee_project(self):
        #verify the employee belongs to a project
        employee_task = self.env['project.task'].search([('user_iD','=',self.user_iD.ID),('status','assigned')],limit=1)
        employee_project = self.env['project.project'].search([('ID',employee_task.project_ID.ID)],limit=1)

从 Odoo 14 中的数据库检索数据

感谢您的时间!

解决方法

compute 方法必须将计算值分配给字段。

您可以使用依赖于相关用户的 many2many 字段来计算分配给所选用户的项目。如果只有一个项目分配给所选用户,Odoo 将显示一个项目。

示例

class Resemployee(models.Model):
    _inherit = 'hr.employee'

    project_ids = fields.Many2many('project.project',compute='_get_assigned_projects',String='Projects')

    @api.depends('user_id')
    def _get_assigned_projects(self):
        project_task = self.env['project.task']
        for employee in self:
            if employee.user_id:
                employee.project_ids = [(4,project_id,0) for project_id in
                                        project_task.search(
                                            [('status','=','assigned'),('user_id',employee.user_id.id)]
                                        ).mapped('project_id.id')]
            else:
                employee.project_ids = false

使用以下代码在工作移动字段前显示分配的项目标签:

<record id="view_employee_form" model="ir.ui.view">
    <field name="name">hr.employee.form</field>
    <field name="model">hr.employee</field>
    <field name="inherit_id" ref="hr.view_employee_form"/>
    <field name="arch" type="xml">
        <field name="mobile_phone" position="before">
            <field name="project_ids" widget="many2many_tags"/>
        </field>
    </field>
</record>  
,

您可以执行以下操作:

#for the moment i have added the variable in the class
project_name = fields.Char('Project Name',compute='_compute_get_employee_project')

#this is the function i am building (trying)
@api.multi
@api.depends('user_id')
def _compute_get_employee_project(self):
    for emp in self:
        #verify the employee belongs to a project
        employee_task = self.env['project.task'].search([('user_id',self.user_id.id),('status','assigned')],limit=1)
        employee_project = self.env['project.project'].search([('id',employee_task.project_id.id)],limit=1)
        emp.project_name = employee_project.display_name

或者你可以走另一条路

project_ids = fields.One2many('project.project',compute='_compute_get_employee_project')

@api.multi
@api.depends('user_id')
def _compute_get_employee_project(self):
    for emp in self:
        emp_task_ids = self.env['project.task'].search([('user_id',emp.user_id.id),'assigned')])
        emp_project_ids = emp_task_ids.mapped('project_id')
        emp.write({
            'project_ids': [(6,emp_project_ids.ids)]
        })

请注意之前的字段定义 Char 和新的 One2many 之间的区别。添加 limit=1 的第一种情况与没有限制的第二种情况之间的区别。这是因为用户可以被分配到不同项目中的多个任务。

如果一切正常,请随时告诉我们。

大佬总结

以上是大佬教程为你收集整理的从 Odoo 14 中的数据库检索数据全部内容,希望文章能够帮你解决从 Odoo 14 中的数据库检索数据所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:14