Odoo - Many2one 在数据库中的实现
Odoo - Many2one implementation in database
在调试模块时,我需要直接在 postgres 中检查 many2one 字段。
如何在数据库中找到属于给定 hr_expense_sheet 行的 account_move 行? ir_model_data table是用来实现many2one关系的吗?
class HrExpenseSheet(models.Model):
....
account_move_id = fields.Many2one('account.move', string='Journal Entry', copy=False)
您并没有提供足够的信息让我了解每个模型之间的确切关系,但这里有一个大概的想法。
Is ir_model_data table used to implement the many2one relation?
Many2one
关系由 foreign key 管理。因此,在 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;
在调试模块时,我需要直接在 postgres 中检查 many2one 字段。
如何在数据库中找到属于给定 hr_expense_sheet 行的 account_move 行? ir_model_data table是用来实现many2one关系的吗?
class HrExpenseSheet(models.Model):
....
account_move_id = fields.Many2one('account.move', string='Journal Entry', copy=False)
您并没有提供足够的信息让我了解每个模型之间的确切关系,但这里有一个大概的想法。
Is ir_model_data table used to implement the many2one relation?
Many2one
关系由 foreign key 管理。因此,在 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;