2

したがって、デフォルトで One2many リストを埋めようとしています。基本的なフィールドを定義し、One2many および Many2many の「特別なコマンド」を読みましたが、何らかの理由で機能していないようです (エラー メッセージなどは表示されず、入力されません)。

私のコード:

@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")
4

1 に答える 1

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」フィールドに値を渡しているため、One2many リストで値を取得します。

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

レコードを作成しようとするとデフォルトのメソッドが呼び出されるため、コンテキストにはactive_idsがないため、辞書はNoneを返します。

したがって、エラーが発生する可能性があります: TypeError: 'NoneType' object has no attribute ' getitem '

ノート:

one2many レコードを感じながら、many2one リファレンスを設定するだけです。One2many フィールドはフレームワーク自体によって管理され、many2one 参照に対して常に生成され、そこで Many2one 参照を指定していないためです。

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

メソッドを間違ったデコレータで装飾しました。デフォルト値を設定するには、メソッドを@api.model(空白のレコードセット) で装飾する必要が@api.oneありますが、メソッドを呼び出すには常にレコードセットが必要です。

メソッド デコレータの詳細については、 Odoo Docsを参照してください。

于 2017-01-09T10:11:02.533 に答える