2017-01-09 8 views
1

私はデフォルトでOne2manyリストを入力しようとしています。私は基本的なフィールドを定義し、One2manyとMany2many'sのための "特別なコマンド"を読んだが、何らかの理由で動作しないように見える(何もエラーメッセージが出ない、それだけでは入力しない)デフォルトでは、1から2の数字を入力してください。

マイコード:

@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

注:デフォルトのメソッドが呼び出されます "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])]) 

を渡しているので、上記の場合

@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 

、あなたはOne2manyリストの値を取得しますコンテキスト内でレコードを作成しようとするとき、active_idはありませんので、辞書はNoneを返します。 TypeError例外:

だから、エラーを有することができる '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に存在しない理由を答えを更新しました。それを確認してください。問題がなければ、モデル構造を更新してください。 –

関連する問題