many2many browse python xml postgresql openerp odoo

python - browse - odoo orm 11



Llenar el campo Many2many(odoo 8) (4)

Necesitas usar un onchange method para myfield , luego dentro de él necesitas completar el campo de graduations , algo como esto:

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

Qué he hecho:

Tengo un módulo con

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

Entonces tengo otra clase con

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

Lo que consigo:

myfield funciona bien, pero el campo de graduations está vacío. Si edita user 1 perfil del user 1 , puede agregar entradas al campo de graduation con Add item , pero necesito que se llene automáticamente.

Lo que espero

Espero que cada registro en el que se establece myfield digamos user 1 , sea visible en las graduations campo cuando abra user 1 perfil de user 1 . Cuando creo un registro y establezco el valor de myfield , por ejemplo, el user 1 , ese registro debe estar visible en user 1 perfil del user 1 en las graduations campo. ¿Cómo lograr eso?


Puedes lograr así.

Por ejemplo:

@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'')

Si no desea usar @api.depends , puede usar @ api.multi . Como referencia, puede consultar el módulo de cuenta con el archivo account_invoice.py .


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

O

user_rel_id = fields.Many2many(''course'')

Para completar datos (para agregar una nueva relación)

user_rel_id = [(4,[course_ids])]

Una lista completa de opciones se encuentra en la documentación de la clase osv.

Para un campo many2many , se espera una lista de tuplas. Aquí está la lista de tuplas aceptadas, con la semántica correspondiente:

(0, 0, { values }) enlace a un nuevo registro que debe crearse con el diccionario de valores dado

(1, ID, { values }) actualiza el registro vinculado con id = ID (escribe valores en él)

(2, ID) elimine y elimine el registro vinculado con id = ID (las llamadas se desvinculan de la ID, que eliminarán completamente el objeto y también el enlace)

(3, ID) corta el enlace al registro vinculado con id = ID ( elimina la relación entre los dos objetos pero no elimina el objeto de destino en sí)

(4, ID) enlace al registro existente con id = ID (agrega una relación)

(5) desvincular todo (como usar (3, ID) para todos los registros vinculados)

(6, 0, [IDs]) reemplace la lista de ID vinculados (como usar (5) luego (4, ID) para cada ID en la lista de ID)


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