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é.