Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Herencia Odt
Herencia Odt
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
Este articulo es sobre heredar modelos en Odoo, para que sirve esto? pues para modificar, añadir, quitar
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.
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.
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í:
class res_partner(osv.osv):
_name = 'res.partner'
_inherit = 'res.partner' # Aqui colocamos el nombre del modelo que vamos a heredar
_columns = {
almacenar el DNI
_sql_constraints = [
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.
class res_partner(models.Model):
_name = 'res.partner'
_inherit = 'res.partner'
dni = fields.Char(string="DNI")
_sql_constraints = [
No tengo mucho tiempo así que voy a explicar lo siguientes casos que considero lo mas común en el trabajo,
1.Modificar el orden.
2.Quitar o añadir un campo atributos (por ejemplo que sea un campo requerido).
class res_partner(osv.osv):
_name = 'res.partner'
_inherit = 'res.partner'
_order = "name asc" # Ordenamiento ascendente, en caso que querramos que sea
_columns = {
_defaults = {
'is_company' : False, # Declaro que los socios por defecto no sean tratados como
<data>
<field name="name">account.invoice.supplier.form.inh</field>
<field name="model">account.invoice</field>
</field>
</record>
</data>
</openerp>
Hasta aquí la estructura básica para heredar una vista, el “id” le ponemos el que queramos, “name” también,
pero conviene hacerlo entre puntos, porque esa cadena va ser incluida en los archivos de traducción, y los va
confundir luego. En “model”, ponemos la información del objeto que obtuvimos en
modo desarrollador, y el mas importante en este caso es “inherit_id” y “ref”, ahi
ponemos el id externo de la vista, ojo no olvidar ponerla con el punto en este caso es
“account.invoice_supplier_form”.
Ahora vamos a ver casos comunes, dejo caso mas complicados para un siguiente post.
•Añadir un campo.
<data>
<field name="name">account.invoice.supplier.form.inh</field>
<field name="model">account.invoice</field>
placeholder="Condition"/>
</xpath>
</field>
</record>
</data>
</openerp>
Hay varios métodos para recorrer la estructura, pero el que muestro mas arriba es el mas elegante y
poderoso, se trata de construir expresiones a traves de XPATH (de XML Path
Language).
Creamos las etiquetas <xpath></xpath> y dentro del atributo expr=”” le decimos que busque el campo cuyo
nombre sea ‘date_invoice’ (la fecha de la factura), el atributo position=, le indicamos after, para que coloque
nuestro nuevo campo inmediatamente después de date_invoice.
Estas son las opciones:
XPATH también puede recibir el nombre de ruta completo del elemento en cuestión, si es
Modificaremos los atributos del campo ‘partner_id’, para mostrar como manipular los
atributos.
Hola hago este post por si alguien necesita saber como ocultar un campo vacio en una vista form
(Formulario) a traves de sus atributos en Odoo v8.Supongamos que tenemos un campo One2many llamado
line_ids, en este caso en la definición de la vista form correspondiente, debemos añadir unas lineas de la
siguiente forma:
De esta forma si el campo esta vacio, simplemente no sera dibujado por el navegador, ahorrando espacio en
campos de solo lectura…