2017-01-09 37 views
1

所以我想默認填寫One2many列表。我已經定義了一個基本的領域,閱讀One2many和Many2many的「特殊命令」,但它似乎沒有工作出於某種原因(沒有錯誤信息或任何,只是不填充它)默認填寫One2many

我的代碼:

@api.one 
def _get_competitions(self): 
    result = [] 
    values = {'name': 'test', 'xx_price': 550, 'xx_seats_left': 50, 'xx_attending': True} 
    result.append((0, 0, values)) 
    return result 

xx_competitions_attendee = fields.One2many('xx.competition.attendee', 'xx_event_id', string="Competitions", default=_get_competitions) 

重新整理了一下,現在我只是在搜索結果中,仍然列表不會被填滿:

@api.model 
def _get_competitions(self): 
    return self.env['xx.competition.attendee'].search([('xx_event_id.id', '=', self._context.get('active_ids')[0])]) 

xx_competitions_attendee = fields.One2many('xx.competition.attendee', 'xx_event_id', string="Competitions", default=_get_competitions) 

我已經設置在其他模型的Many2one關係,我認爲我不應該在這裏發佈它,但要確保:

class CompetitionAttendee(models.Model): 
    _name = 'xx.competition.attendee' 

    xx_event_id = fields.Many2one('event.event', string="Event") 
+0

你會使用那個one2many的關係,或者你只需​​要在窗體中顯示它? – dccdany

回答

0

注:

@api.model 
    def _get_competitions(self): 
     result = [] 
     values = {'name': 'test', 'xx_price': 550, 'xx_seats_left': 50, 'xx_attending': True} 
     result.append((0, 0, values)) 
     return result 

在上述情況下,你是因爲你是路過值 「xx_competitions_attendee」 字段

@api.model 
def _get_competitions(self): 
    return self.env['xx.competition.attendee'].search([('xx_event_id.id', '=', self._context.get('active_ids')[0])]) 

默認方法將調用將獲得One2many列表值當你要在上下文中創建記錄時,沒有任何active_ids,因此字典將返回None。

所以,你可能有錯誤:類型錯誤: 'NoneType' 對象有沒有屬性 '的GetItem'

注:

You just need to set many2one reference while you feel one2many record. Because One2many field is managed by framework it self and it's always being generated against the many2one reference and you have not specify any Many2one reference there.

values = {'many2one_field' : many2one_ref, 'name': 'test', 'xx_price': 550, 'xx_seats_left': 50, 'xx_attending': True,} 

你應該試試以下,

@api.model 
def _get_competitions(self): 
    result = [] 
    values = {'name': 'test', 'xx_price': 550, 'xx_seats_left': 50, 'xx_attending': True} 
    result.append((0, 0, values)) 
    return result 

You have decorated method with wrong decorator, to set default values method must be decorated with @api.model (blank recordset) while @api.one always require recordset to call method.

您可以參考Odoo Docs以瞭解更多關於方法裝飾器的信息。

+0

我完全忘了裝飾者。我現在在我的模型中創建了一個記錄(來自One2many列表)。在我的默認方法中,我只是返回一個搜索結果(調試它,它包含記錄)。所以基本上和我在OP中提到的一樣,但是名單沒有被填充。我將在OP – RandomPerson

+0

中添加示例代碼如果可能,請用模型結構更新問題。 –

+0

我已經更新答案,爲什麼記錄不存在默認的One2many。檢查它,如果不工作,請更新您的問題的模型結構。 –