Welcome!

This community is for professionals and enthusiasts of our products and services. Share and discuss the best content and new marketing ideas, build your professional profile and become a better marketer together.

1

Cómo importar dato en un campo binario desde url (Odoo)

por
Yeny Martinez Diaz
en 20/08/20 21:06 53 vistas

Hola. Tengo un fichero .xls/.xlsx con registros para cargar en mi base Odoo, en un modelo con un campo Binary. La columna para poblar este campo contiene urls donde se encuentra el fichero real. Alguna idea de cómo hacer esto?
Help!!


1
Osmar Leyet
En 20/08/20 22:42

Hola. Te sugiero crear una función que genere directamente los registros después de procesar el fichero y obtener los documentos correspondientes desde las urls.
Luego llama a esta función desde una etiqueta <function/> en tu xml, asegurándote de especificar noupdate='1', de esta forma solo se ejecutará al instalar el módulo (mejor si lo haces en un módulo solo para eso).

Por ejemplo :

1 - Tu .xml lucirá así:
<?xml version="1.0" encoding="utf-8"?>
<odoo noupdate="1">
<function model="dummy.model" name="_f_dummy"/>
</odoo>

2 - Y tu .py donde está tu función _f_dummy, quedará de la siguiente forma (usando la librería urllib):

# -*- coding: utf-8 -*-
from odoo import models, api
from xlrd import open_workbook
from urllib.request import urlopen
from odoo.modules.module import get_module_path
import base64

class TuDummyClass(models.Model):
_name = "dummy.model"

@api.model
def _f_dummy(self):
    # Si el archivo .xls lo ubicaste en la carpeta data de tu módulo...
    path = '{}/data/tu_fichero.xls'.format(get_module_path('tu_modulo'))
    doc = open_workbook(path)
    hoja = doc.sheet_by_name('data')
    rec_set = self.env['modelo_que_quieres_poblar']
    for fila in hoja.get_rows():
        campo1 = str(fila[0].value)
        campo2 = str(fila[1].value)
        url = str(fila[2].value)
        file = urlopen(url)
        f = base64.standard_b64encode(file.read())
        registro_id = rec_set.create({'campo1':campo1,
                                                            'campo2': campo2,
                                                            'campo_binario': f})
        # Una vez procesado asegúrate de cerrar el archivo abierto.
        file.close()


Su respuesta

Por favor trate de dar una respuesta sustancial. Si desea comentar sobre la pregunta o respuesta, utilice la herramienta de comentarios. Recuerde que siempre puede revisar sus respuestas - no hay necesidad de contestar la misma pregunta dos veces. Además, no olvide valorar - realmente ayuda a seleccionar las mejores preguntas y respuestas

Mantener informado

Acerca de esta comunidad

Esta comunidad es para profesionales y entusiastas de nuestros productos y servicios, compartir los mejores contenidos y nuevas ideas de marketing, construir su perfil profesional y mejorar el mercado para todos. Lea las directrices

Herramientas de las preguntas

1 seguidor(es)

Estadísticas

Preguntado: 20/08/20 21:06
Visto: 53 veces
Última actualización: 20/08/20 22:47