私がやったこと:
私はモジュールを持っています
myfield = fields.Many2one('res.partner', string="Graduate", domain=[('is_graduated', '=', True)])
それから私は別のクラスを持っています
_inherit = 'res.partner'
is_graduated = fields.Boolean("Graduated before?", default=False)
graduations = fields.Many2many('my_module.courses', string="Graduation courses")
私が得るもの:
myfield
は正常に機能しますが、graduations
フィールドは空です。 user 1
プロファイルを編集する場合は、Add item
を使用してgraduation
フィールドにエントリを追加できますが、自動的に入力する必要があります。
私が期待するもの:
myfield
がuser 1
と言うように設定されているすべてのレコードは、user 1
プロファイルを開くと、フィールドgraduations
に表示されると予想されます。レコードを作成してmyfield
値をuser 1
と言うように設定すると、そのレコードはgraduations
フィールドのuser 1
プロファイルに表示される必要があります。それを達成する方法は?
user_rel_ids = fields.Many2many(comodel_name = 'course'、relation = 'user_course_rel'、column1 = 'user_id'、column2 = 'course_id')
または
user_rel_id = fields.Many2many('course')
データの入力用(新しいリレーションの追加用)
user_rel_id = [(4,course_id)]
http://odoo4u.blogspot.com/2014/10/orm-methods.html によると、次のように書かれています:オプションの完全なリストはクラスのドキュメントにあります。これと同じことがone2manyにも当てはまります
many2manyおよびone2manyフィールドの場合、タプルのリストが必要です。受け入れられるTupleのリストと対応するセマンティクスを以下に示します。
(0, 0, { values })
特定の値辞書を使用して作成する必要がある新しいレコードへのリンク
(1, ID, { values })
updateid = IDのリンクされたレコード(値を書き込む)
(2, ID)
removeおよびdeleteid = IDのリンクされたレコード(IDでunlinkを呼び出し、オブジェクトを完全に削除し、オブジェクトへのリンクも同様に削除します) )
(3, ID)
id = IDのリンクされたレコードへのリンクを切断します(2つのオブジェクト間の関係を削除します。ただし、ターゲットオブジェクト自体は削除しません)
(4, ID)
linkid = IDの既存レコードへのリンク(関係を追加)
(5)
unlink all(すべてのリンクされたレコードに(3、ID)を使用するなど)
(6, 0, [IDs])
replaceリンクされたIDのリスト(IDのリスト内の各IDに対して(5)、次に(4、ID)を使用するなど)
myfield
にonchange method
を使用する必要があります。その中に、次のようなgraduations
フィールドを入力する必要があります。
@api.onchange('myfield'):
def _onchange_myfield(self):
#fill graduations field here...
...
_inherit = 'crm.phonecall'
alarm_ids = fields.Many2many('calendar.alarm',string="Reminders")
set the alarm_ids of calendar.event model in create method of crm phonecall...
alarm_ids = [(6,0,self.alarm_ids.ids)]
_inherit = 'calendar.event'
alarm_ids = fields.Many2many('calendar.alarm',string="Reminders")
これらのように達成できます。
例えば:
@api.one
@api.depends(
#here you may define your depend field name
)
def _set_graduations(self):
#here comes your logic which will collect ids
#and than return it with self.field_name like
self.graduations = [list_of_ids]
graduations = fields.Many2many('my_module.courses', string='Payments',
compute='_set_graduations')
@ api.dependsを使用したくない場合は、@ api.multiを使用できます。参考のため、account module with account_invoice.py fileを確認してください。