Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Filling Many2many field (odoo 8)

What I've done:

I have a module with

myfield = fields.Many2one('res.partner', string="Graduate", domain=[('is_graduated', '=', True)])

Then I have another class with

_inherit = 'res.partner'
is_graduated = fields.Boolean("Graduated before?", default=False)
graduations = fields.Many2many('my_module.courses', string="Graduation courses")

What I get:

The myfield works good, but the graduations field is empty. If you edit user 1 profile you can add entries to graduation field using Add item, but I need it to be filled automaticaly.

What I expect:

I expect that every record where myfield is set to lets say user 1, will be visible in field graduations when you open user 1 profile. When I create record and set myfield value to lets say user 1, that record must to be visible in user 1 profile in the field graduations. How to achieve that?

like image 912
hockeyman Avatar asked Aug 06 '15 10:08

hockeyman


3 Answers

user_rel_ids = fields.Many2many(comodel_name='course', relation='user_course_rel', column1='user_id', column2='course_id')

Or

user_rel_id = fields.Many2many('course') 

For Filling Data (for add new relation)

user_rel_id = [(4,course_id)]

According to http://odoo4u.blogspot.com/2014/10/orm-methods.html, It says: A full list of options is in the documentation for the class. This same thing will apply for one2many

For a many2many and one2many field, a list of tuples is expected. Here is the list of the tuple that is accepted, with the corresponding semantics:

(0, 0, { values }) link to a new record that needs to be created with the given values dictionary

(1, ID, { values }) update the linked record with id = ID (write values on it)

(2, ID) remove and delete the linked record with id = ID (calls unlink on ID, that will delete the object completely, and the link to it as well)

(3, ID) cut the link to the linked record with id = ID (delete the relationship between the two objects but does not delete the target object itself)

(4, ID) link to existing record with id = ID (adds a relationship)

(5) unlink all (like using (3, ID) for all linked records)

(6, 0, [IDs]) replace the list of linked IDs (like using (5) then (4,ID) for each ID in the list of IDs)

like image 81
Synodica Solutions Pvt. Ltd. Avatar answered Nov 19 '22 22:11

Synodica Solutions Pvt. Ltd.


You need to use an onchange method for myfield, then inside it you need to fill the graduations field, something like this:

@api.onchange('myfield'):
def _onchange_myfield(self):
    #fill graduations field here...
    ...
like image 26
Juan Salcedo Avatar answered Nov 19 '22 23:11

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") 
like image 1
Bhautik Avatar answered Nov 19 '22 21:11

Bhautik