Odoo - 数据库中的Many2one实现

时间:2017-08-28 17:19:18

标签: odoo-10

在调试模块时,我需要直接在postgres中检查many2one字段。

如何在数据库中找到属于给定 hr_expense_sheet 行的 account_move 行?用于实现many2one关系的 ir_model_data 表是什么?

class HrExpenseSheet(models.Model):
....
    account_move_id = fields.Many2one('account.move', string='Journal Entry', copy=False)

1 个答案:

答案 0 :(得分:2)

您并没有真正提供足够的信息让我知道每个模型之间的确切关系,但这是一个大致的想法。

  

ir_model_data表用于实现many2one关系吗?

使用foreign key管理Many2one关系。因此,在HrExpenseSheet模型上,它将account_move_id存储为ID。如果您想直接从数据库获取AccountMove信息,则必须在account_move中搜索该ID。

假设模型与此相关:

class AccountMove(models.Model):
    _inherit = "account.move"
    ...

class HrExpense(models.Model):
    _inherit = "hr.expense"
    ...

class HrExpenseSheet(models.Model):
    _inherit = "hr.expense.sheet"

    account_move_id = fields.Many2one('account.move', string='Journal Entry', copy=False)
    expense_id = fields.Many2one('hr.expense', string='Expense', copy=False)

基本上,您将运行的查询将查找属于给定费用的任何行的所有帐户移动。

SELECT * FROM account_move WHERE id IN (
    SELECT account_move_id FROM hr_expense_sheet WHERE expense_id = 123);

如果您只想查找特定的HrExpenseSheet,可以使用:

SELECT * FROM account_move WHERE id = 123;