Odoo, OpenERP, Programación

Heredar y modificar modelos en Odoo

Hola a todos voy a tratar de ponerme al día después de mucho, así que voy a escribir una serie de artículos de un tirón aprovechando que tengo tiempo.
Este articulo es sobre heredar modelos en Odoo, para que sirve esto? pues para modificar, añadir, quitar campos en nuestros modelos.
Asumo que ya saben como crear un modulo e incluir archivos.
Vamos a empezar por el heredar un modelo:

En este caso voy a heredar el modelo de Partner (res.partner) para poder modificarlo a mi antojo, lo mas pro seria hacer estas cosas sin mirar siquiera el código fuente, pero para los curiosos, esta definido en el archivo openerp>addons>base>res>res_partner.py, sin embargo yo voy a explicar como hacerlo por las buenas.

Vamos hasta el formulario del objeto que queramos modificar, en este caso “res.partner” seria la información de nuestros clientes, proveedores y socios, entonces vamos hasta Ventas, ponemos el cliente web en modo desarrollador.

Pantallazo-Clientes - Odoo - Mozilla Firefox
Ya en modo desarrollador, al hacer click, en cualquier socio, nos abrirá la vista formulario (form de ahora en mas) del modelo partner, hacemos click en el desplegable de opciones del desarrollador, y pinchamos la opción “Administrar vistas”, se nos abrirá un popup, y aquí tendremos la información que necesitamos, para modificar el modelo, en la columna nos dice que el nombre del objeto es “res.partner”. Y vamos a utilizar esa información para heredar, también una vez mas espabilados puedes obtener esa información solo mirando la URL.

Pantallazo-Clientes - Odoo - Mozilla Firefox-2

Creamos un archivo .py y lo importamos en nuestro init.py.

Para OpenERP 7 y con el estilo de la vieja API del ORM, seria así:


# -*- coding: utf-8 -*- from openerp.osv import fields, osv class res_partner(osv.osv): _name = 'res.partner' _inherit = 'res.partner' # Aqui colocamos el nombre del modelo que vamos a heredar _columns = { 'dni': fields.char('DNI', size=32, translate=True), # declaro un campo char para almacenar el DNI } # Añado una restriccion unique para que el DNI no se repita _sql_constraints = [ ('dni', 'unique(dni)', 'The DNI must be unique') ] res_partner()

Es bastante simple en _inherit= (tambien puede ser _inherits=), declaro el objeto que voy a heredar. En _columns añado un campo “dni” y en por ultimo añado una restricción en _sql_constraints, para que no se pueda repetir.

Con Odoo V8 cambia un poco, pero la nueva API es retrocompatible, esto significa que se puede escribir de todas formas como lo hacías antes, es importante sin embargo que sepamos que son diferentes ya que por ejemplo si vas a sobrescribir un método de la nueva API, tendrás que hacerlo con el estilo de la nueva API.
Para declarar lo mismo en V8 seria de esta forma:


# -*- coding: utf-8 -*- from openerp import models, api, fields class res_partner(models.Model): _name = 'res.partner' _inherit = 'res.partner' dni = fields.Char(string="DNI") _sql_constraints = [ ('dni', 'unique(dni)', 'The DNI must be unique') ]

Como podemos observar no es muy difícil.

No tengo mucho tiempo así que voy a explicar lo siguientes casos que considero lo mas común en el trabajo, todo en uno, aplica para los casos en que queramos:

  1. Modificar el orden.
  2. Quitar o añadir un campo atributos (por ejemplo que sea un campo requerido).
  3. Quitar o añadir el valor por defecto de un campo.

Pantallazo-Clientes - Odoo - Mozilla Firefox-1


class res_partner(osv.osv): _name = 'res.partner' _inherit = 'res.partner' _order = "name asc" # Ordenamiento ascendente, en caso que querramos que sea descendente, colocamos desc _columns = { 'name': fields.char('Name', required=False) #Redefinimos el campo name y le quitamos el atributo requerido 'dni': fields.char('DNI', required=True), # Hago dni un campo requerido } _defaults = { 'is_company' : False, # Declaro que los socios por defecto no sean tratados como compañias sino como personas fisicas }

Cualquier otro campo que queramos modificar, solo bastara con redefinirlo

Anuncios
Estándar

2 thoughts on “Heredar y modificar modelos en Odoo

  1. Francisco dice:

    Hola, muy bueno el tutorial. Te hago una consulta, ¿La manera de setear un valor de una clase heredada por default es la misma para la version 7 que para la 8? Por ejemplo Si quiero setear el campo “is_company” = True por defualt para la version 8 de Odoo debo agregar al modelo:
    _defaults = {
    ‘is_company’ : True,
    }

    O se declara de manera diferente a la version 7 ??
    Gracias.
    Saludos, Francisco

    Me gusta

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s