Заполнение 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, вы можете добавить записи в поле graduation, используя Add item, но мне нужно, чтобы он был заполнен автоматически.

Что я ожидаю:

Я ожидаю, что каждая запись, где myfield установлена, чтобы сказать user 1, будет видна в поле graduations при открытии профиля user 1. Когда я создаю запись и устанавливаю значение myfield, чтобы сказать user 1, эта запись должна быть видимой в профиле user 1 в поле graduations. Как достичь этого?

Ответы

Ответ 1

user_rel_ids = fields.Many2many (comodel_name = 'курс', отношение = '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 ожидается список кортежей. Вот список принятых кортежей с соответствующей семантикой:

(0, 0, { values }) ссылка на новую запись, которую необходимо создать с данным словарем значений

(1, ID, { values }) обновить связанную запись с id = ID (записать в нее значения)

(2, ID) удалить и удалить связанную запись с id = ID (вызывает unlink для ID, который полностью удалит объект, а также ссылку на него)

(3, ID) обрезать ссылку на связанную запись с id = ID (удалить связь между двумя объектами, но не удаляет сам целевой объект)

(4, ID) ссылка на существующую запись с id = ID (добавляет связь)

(5) отсоединить все (например, используя (3, ID) для всех связанных записей)

(6, 0, [IDs]) заменить список связанных идентификаторов (например, используя (5) затем (4, ID) для каждого идентификатора в списке идентификаторов)

Ответ 2

Вам нужно использовать onchange method для myfield, а затем внутри него вам нужно заполнить поле graduations, что-то вроде этого:

@api.onchange('myfield'):
def _onchange_myfield(self):
    #fill graduations field here...
    ...

Ответ 3

_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") 

Ответ 4

Вы можете достичь таких целей.

Например:

@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_invoice.py.