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