2017-08-28 46 views
1

在調試模塊時,我需要直接在postgres中檢查many2one字段。Odoo - Many2one在數據庫中的實現

我如何找到在數據庫中的account_move行屬於一個給定的hr_expense_sheet行?是ir_model_data表用來實現many2one關係嗎?

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

回答

2

您不能真正提供足夠的信息讓我知道每個模型之間的確切關係,但這裏有一個總體思路。

是否用ir_model_data表來實現many2one關係?

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; 
+0

我發現account_move_id作爲一個列的表,因此SQL應用實行的是你建議之一。 –