Que es el método copy y como extenderlo

21 de agosto de 2023 por
Gustavo Orrillo
| Sin comentarios aún
 

Odoo brinda un método muy util para los usuarios, la acción Duplicar que se encuentra disponible en todos los objetos


El cual por lo general duplica los objetos y le aplica las restricciones definidas en cada modelo (no todas las columnas se copian, por ejemplo state en las transacciones). Esta acción implementa el método copy, el cual se puede llamar de la siguiente manera en un método:

new_values = {
​'name': 'My new name'
​}
new_rec = self.copy(new_values)

Lo que acabamos de ver devuelve un nuevo objeto con los datos del objeto original. Uno puede cambiar los valores iniciales de dicho objeto modificando el diccionario de valores con el que uno invoca el método copy. En este ejemplo le modificamos el nombre del objeto a 'My new name'.

Ahora, este método ni copia los attachments, los mensajes ni actividades relacionadas con un objeto. Como podemos hacerlo? Es muy sencillo. Por ejemplo podemos extender lo que hicimos anteriormente:

new_values = {
​ ​'name': 'My new name'
​ ​}
new_rec = self.copy(new_values)
for attachment_id in self.attachment_ids:
new_attachment = attachment_id.sudo().copy('res_id': new_rec.id})
for message_id in self.message_ids:
new_message = message_id.sudo().copy({'res_id': new_rec.id})
for activity_id in self.activity_ids:
new_activity = activity_id.sudo().copy({'res_id': new_rec.id})

Lo que acabamos de ver crea un nuevo objeto con los attachments, actividades y mensajes del objeto original. En un nuevo post vamos a hablar de como extender el modelo base de Odoo para desarrollar una acción SuperCopy que implemente lo que acabamos de hacer.

Gustavo Orrillo 21 de agosto de 2023
Compartir
Categorías
Archivar
Identificarse dejar un comentario