Modificar un campo existente de un objeto

Estimados:

Quiero modificar un campo many2one de un objeto existente, lo estoy realizando de esta manera por que SUPUSE que así era perr no funciona :(

Clase a heredar: account.analytic.line

Tiene un campo many2one llamado (account_id) apuntado hacia el objeto: account_analytic_account según veo en la descripción de la tabla:

  CONSTRAINT account_analytic_line_account_id_fkey FOREIGN KEY (account_id)
      REFERENCES account_analytic_account (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE CASCADE,

Ahora yo quiero que deje de "apuntar" a esa tabla u objeto y quiero apuntarlo a otro objeto de siguiente manera:

class account_analytic_line(osv.osv):
    _inherit = "account.analytic.line"
    _columns = {
        'account_id': fields.many2one('account.analytic.plans.percent','Multi plan')
    }
account_analytic_line()

El objeto "account.analytic.plans.percent" existe y con ese no tengo problemas pero al correr mi módulo simplemente no me cambia la estructura de la DB ni me marca error, pero al ejecutar mi código he intentar insertar un registro me marca el error de integridad:

IntegrityError: insert or update on table "account_analytic_line" violates foreign key constraint "account_analytic_line_account_id_fkey"
DETAIL: Key (account_id)=(4) is not present in table "account_analytic_account"

Lo cual es lógico puesto que no modificó la tabla mi código y OERP esta buscando el dato en la referencia anterior "account_analytic_account" y no en la que yo requiero "account.analytic.plans.percent"

¿Alguna idea gurús de OERP?

Gracias

Question information

Language:
Spanish Edit question
Status:
Solved
For:
openerp-mexico-localization Edit question
Assignee:
No assignee Edit question
Solved by:
Moisés López - http://www.vauxoo.com
Solved:
Last query:
Last reply:
Revision history for this message
Moisés López - http://www.vauxoo.com (moylop260) said :
#1

@Erick

Hola, como no están los gurús de OpenERP, te contesto yo :)

Piensalo 10 veces, antes de modificar la FK de un many2one, y después vuelvelo a pensar otras 20 veces...

Yo lo que te recomiendo, es que crees un nuevo campo, y que el que no quieras mostrar, lo saques heredando la vista por medio de un replace.

Por cierto, si te parece que ha sido respondido tu tema, puedes cambiar el estatus de la pregunta a "Solved". Verifica si tienes permisos.

¡Saludos!

Revision history for this message
Moisés López - http://www.vauxoo.com (moylop260) said :
#2

Por cierto, sería bueno que plantearas tu necesidad funcional, en otra pregunta, para saber si ya está solventado sin necesidad de desarrollar.

¡Saludos!

Revision history for this message
Eric Hernández - http://www.grupoaltegra.com (daimon) said :
#3

Jaja gracias Moy,

Ok, entiendo lo que me dices, NO LO MODIFICO, agrego otro campo.

PERO aun me queda la duda SE PUEDE HACER? ya me quedo claro que NO SE DEBE, pero se puede? como?

Y si propondré una pregunta con lo que estoy haciendo, aunque el fin de esto es "meterme" a desarrollar a lo mejor ya esta hecho pero de momento no tengo nada mejor en que desarrollar jaja :)

Gracias.

Revision history for this message
Best Moisés López - http://www.vauxoo.com (moylop260) said :
#4

@Erick

Sí se puede hacer, y así tal cual como lo estás haciendo se puede hacer.
Pero cada vez que hagas un update, va a tomar el original y te lo va a reestableceer, va a entrar al módulo heredado y luego lo va a cambiar.
Y como en este caso, ya tienes id's asignados, y son referencias de otras tablas, al hacerlo así, estás corrompiendo la integridad referencial.

Es decir, imaginate lo siguiente
Tabla: Empleado
id,nombre,departamento_id
1,Raul,8
2,Pedro,9

departamento_id apunta a la tabla departamento, que tiene los siguientes campos
Tabla: Departamento
id, Nombre
8, Pruebas
9, Desarrollo

Luego, tienes una tabla llamada, pasatiempo
Tabla: pasatiempo
id, Nombre
100, Jugar
101, Trabajar

y luego, cambias la tabla Empleado, y le dices, que su campo departamento_id, ahora debe de apuntar a la tabla pasatiempo.

Recordemos, que en Empleado, se tenían las referencias a los id 8 y 9. Los cuales no existen en la tabla pasatiempo.

Es por eso que te marca el error de integridad. ¿Me explico?

Si quieres jugar con algo de provecho, me dices.
Para asignarte un blueprint para que agarres experiencias.

¡Saludos!

Revision history for this message
Eric Hernández - http://www.grupoaltegra.com (daimon) said :
#5

Jaja gracias por lo que me toca.

OK, si me queda claro pero mi tabla la tengo VACIA por lo que el error no se genera por los datos "anteriores" si no cuando intento agregar algo nuevo.

Entonces así como lo hice esta bien segun entiendo, peor ya hice caso de tu recomendación y mejor no toque ese campo.

Gracias y en la siguiente pregunta te comento lo que estoy haciendo.

:)

Revision history for this message
Eric Hernández - http://www.grupoaltegra.com (daimon) said :
#6

Thanks Moisés López - http://www.vauxoo.com, that solved my question.

Revision history for this message
Eric Hernández - http://www.grupoaltegra.com (daimon) said :
#7

Por cierto, adelante puedes asignarme los blue prints que quieras :)