Creación y herencia de modelos en OpenERP

Los modelos en OpenERP hacen referencia a tablas en la base de datos, son objetos que se crean desde un archivo .py, cuando creamos un módulo o aplicación personalizada en un entorno de OpenERP, generalmente se hace un patrón esquema que llevaría una estructura parecida a la siguiente:

mimodulo/
  |- demo/
  |- i18n/
  |   |
  |   '- es.po
  |- __init__.py
  |- mimodulo.py
  |- __openerp__.py
  |- report/
  |- security/
  |   |
  |   |- ir.model.access.csv
  |   '- mimodulo_sec.xml
  |- view/
  |   |
  |   '- mimodulo_view.xml
  |- wizard/
  '- workflow/
      |
      '- mimodulo_flow.xml

En el archivo mimodulo.py se pueden crear módulos nuevos con un esquema parecido al siguiente:

# -*- coding: utf-8 -*-
##############################################################################
#
#    Estudiantes, modulo estudiantes para mimodulo
#    Copyright (C) 2014 Satelite Guayana (http://estudiantes.es).
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU Affero General Public License as
#    published by the Free Software Foundation, either version 3 of the
#    License, or (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU Affero General Public License for more details.
#
#    You should have received a copy of the GNU Affero General Public License
#    along with this program.  If not, see .
#
##############################################################################

import time
from openerp.osv import fields, osv

class estudiar(osv.Model):
    _name = 'estudiantes.estudiantes'
    _description = 'Modulo para estudiantes'
    _columns = {
        'name': fields.char("Nombre",20),
        'apellido': fields.char("Apellido",20),
        'telefono': fields.char("Telefono",20),
        'email': fields.char("Correo electronico",50),
        'direccion': fields.text("Direccion",20)
   }

El nombre del modelo no necesariamente debe ser igual al nombre de la tabla que se está creando, si somos de habla hispana, podemos agregar en la cabecera del archivo la referencia:

# -*- coding: utf-8 -*-

Pero no significa que podamos escribir con acentos algún comentario, generalmente ocurren errores por ese detalle, esos acentos sólo podemos escribirlos en el archivo mimodulo.xml.

El caso para heredar modelos, simplemente significa heredar los campos de una tabla original y agregarle más campos que sean necesarios para adaptar la tabla a las necesidades del usuario, en dicho caso sería editar el mismo archivo mimodulo.py con un esquema parecido al siguiente:

# -*- coding: utf-8 -*-
##############################################################################
#
#    Estudiantes, modulo estudiantes para mimodulo
#    Copyright (C) 2014 Satelite Guayana (http://estudiantes.es).
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU Affero General Public License as
#    published by the Free Software Foundation, either version 3 of the
#    License, or (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU Affero General Public License for more details.
#
#    You should have received a copy of the GNU Affero General Public License
#    along with this program.  If not, see .
#
##############################################################################

import time
from openerp.osv import fields, osv

class estudiar(osv.Model):
    _inherit = 'res.partner'
    _description = 'Campos adicionales para estudiantes'
    _columns = {
        'seccion': fields.char("Seccion",20),
        'grado': fields.char("Grado que cursa",20),
        'plantel': fields.char("Plantel educativo",20),
        'direccion': fields.text("Direccion",20)
   }

En donde la única diferencia es el atributo _inherit, que se cambia por el atributo _name del esquema para crear un modelo nuevo. Una vez que se crea el contenido del archivo mimodulo.py, se debe agregar la referencia en el archivo __init__.py de la siguiente manera:

import mimodulo

Siempre se debe importar cada modelo o referencia de los mismos, con el nombre del archivo .py sin la extensión. Otro detalle bien importante es el orden del código en archivos de python y el estándar que usa OpenERP para la creación y asignación de valores en las variables.

Advertisements
This entry was posted in OpenERP. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s