Puede darse el caso de que necesitemos crear un archivo con un contenido el cual generamos y con un nombre de archivo en específico, por ejemplo file.txt
para hacer esto podemos hacer uso de un pequeño “truco”, usando dos campos: uno de tipo char y otro de tipo binario podemos hacer una archivo descargable con el contenido que necesitemos.
Lo primero que tenemos que hacer es agregar los campos al modelo que deseemos.
En Odoo v8
import base64
from openerp import models, fields, api
class MyModel(models.Model):
_name = 'my.model'
txt_filename = fields.Char()
txt_binary = fields.Binary()
@api.one
def generate_file(self):
"""
function called from button
"""
content = ''
# make something to generate content
return self.write({
'txt_filename': 'file.txt',
'txt_binary': base64.encodestring(content)
})
En odoo v7 (OpenERP)
import base64
from osv import orm
class MyModel(orm.Model)
_name = 'my.model'
_columns = {
'txt_filename': fields.char(),
'txt_binary': fields.binary()
}
def generate_file(self, cr, uid, ids, context=None):
"""
function called from button
"""
content = ''
# make something to generate content
return self.write(cr, uid, ids, {
'txt_filename': 'file.txt',
'txt_binary': base64.encodestring(content)
}, context=context)
Archivo xml para la vista
Ahora debemos agregar esos campos a la vista form
donde deseemos que esté el descargable.
<field name="arch" type="xml">
<button name="generate_file" type="object" string="Generate file"/>
<field name="txt_filename" invisible="1"/>
<field name="txt_binary" filename="txt_filename" readonly="1"/>
</field>
Luego veremos nuestro formulario de la siguiente forma:
Otra opción es usar este módulo que desarrollé.