【问题标题】:Facing problems with openERP ORM methods [closed]面临openERP ORM方法的问题[关闭]
【发布时间】:2025-12-07 04:55:01
【问题描述】:

我在模块开发中遇到问题,我开发了一个完整的学生,到目前为止,我的姓名和学位并成功地显示在了网络上。 现在,当我打算使用 ORM 方法时,我无法理解它是如何工作的以及 id 等来自何处,就像我想从我的数据库表 STUDENT 中获取所有学生一样。

请指导我如何通过简单的示例使用 ORM 方法,如果有人可以通过简单的 ORM 方法示例上传他们的模块,将会很有帮助。

【问题讨论】:

  • 如果您现在对 ORM 一无所知,您是如何开发student 模块的?如果您发布您现在所做的事情,那就太好了。
  • 我刚刚创建了一个带有姓名、注册号等的学生课程,并在网上展示了该课程,我刚开始学习 openerp,所以暂时我只是学习课程定义以及如何通过 XML 在网上显示所以接下来我要学习ORM

标签: openerp openerp-7 openerp-8


【解决方案1】:

查找记录的两个主要ORM方法是search和name_search(name_search只是使用一些预设的搜索参数进行搜索)。

搜索方法只返回 ID,然后您在浏览中使用这些 ID 来获取记录,所以一个非常常见的模式是这样的:

student_ids = self.search(cr, uid, [('grade', '=', 'A'), ('enrolled', '=', True), ('gpa', '>=', 4.0), ('course.department', '=', 'Science')] context = context
students = self.browse(cr, uid, student_ids, context = context)

搜索中稍微棘手的部分是搜索参数列表。这些是字段、运算符、值的元组列表。这里有一个隐含的 AND,所以你需要使用 '|'如果你想要 OR。请注意,它会处理相关对象,我在示例中使用了 course.department。

搜索方法将返回一个 ID 列表或一个空列表。请注意如何将其传递给浏览方法而不对其进行测试,因为浏览方法将为列表中的每个 ID 返回一个浏览记录列表,因此如果您传入一个空的 ID 列表,您将得到一个空的浏览记录列表.

看看https://doc.openerp.com/trunk/server/api_models/

【讨论】:

  • 感谢阿德里安很好地回答了这个问题,,,但我的问题是当我使用以下参数调用我的函数时 obj = open_partners() obj.get_result_info(cr, uid, 'res .partner', [('id', '=', 140)] , context=None) 它显示 cr 和 uid 的错误,并表示全局名称 cr 和 uid 未定义。这是主要错误,如果能提供帮助,我将不胜感激
  • 这是一个 python 问题,而不是 OpenERP 特定的问题。您正在尝试使用您当前没有的两个参数调用您的方法。您需要发布您的源代码才能就此提供建议。
  • class Sale(osv.osv): _name = 'sale' _columns = { 'name': fields.char('Company Name', size=128) } def get_default_company(self, cr, uid , context=None): company_id = self.pool.get('res.users').browse(cr, uid, uid).company_id.id, return company_id Sale() 这是源代码,告诉我怎么调用方法,get_default_company()。
  • 离你不远了。您的默认方法应该返回公司名称,而不是 id,您只需在方法定义之后定义一个默认字典。请注意,您将默认设置为可调用,而不是可调用的结果,OpenERP 将为您处理参数。但是有一个问题,您确定要将公司名称存储为 char 字段吗?通常你会使用 many2one 来 res.company,OpenERP 无论如何都会显示公司名称。默认定义是 _defaults = {'name': get_default_company}