web-dev-qa-db-ja.com

Many2manyフィールドを埋める(odoo 8)

私がやったこと:

私はモジュールを持っています

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フィールドにエントリを追加できますが、自動的に入力する必要があります。

私が期待するもの:

myfielduser 1と言うように設定されているすべてのレコードは、user 1プロファイルを開くと、フィールドgraduationsに表示されると予想されます。レコードを作成してmyfield値をuser 1と言うように設定すると、そのレコードはgraduationsフィールドのuser 1プロファイルに表示される必要があります。それを達成する方法は?

18
hockeyman

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)を使用するなど)

37

myfieldonchange methodを使用する必要があります。その中に、次のようなgraduationsフィールドを入力する必要があります。

@api.onchange('myfield'):
def _onchange_myfield(self):
    #fill graduations field here...
    ...
1
Juan Salcedo
_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") 
1
Bhautik

これらのように達成できます。

例えば:

@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を確認してください。

0
Bhavesh Odedra