campos relacionales en Odoo 8.0

419 views
Skip to first unread message

marco garcia baturan

unread,
Jan 26, 2017, 10:43:53 AM1/26/17
to odoo-Argentina - Preguntas y respuestas para personalizadores
Buenas tardes,

Quiero saber como crear correctamente un campo relacional de una tabla a muchas o de un modelo a muchos sea dentro del mismo módulo o entre diferentes. Entonces he creado un módulo que tiene dos modelos Registro y Procedencia, cree una relación bidireccional con los trazos de código que pongo aquí:

# -*- coding: utf-8 -*-
# importamos modulos
from openerp import models, fields, api
from openerp.exceptions import except_orm
import math
import re
import os
# Clase declara el modelo de la base de datos del modulo para construirlo al instalarse
class registro(models.Model):
# llamo al modelo
_name = 'registro.paciente'
# aqui van las funciones y campos
# Declaro el ID de la tabla del modulo en python para que SQL pueda darlo como primary key
id = fields.Integer('Numero de ingreso', readonly=True)
id2 = fields.One2many('procedencia.paciente', 'procedencia_id')

Y este es el otro modelo:

class registro(models.Model):
"""Éste módulo de python esta subsumido dentro del módulo de Odoo 8 de Registro de pacientes
y es complementario con su tabla de procedencia de pacientes. Hereda como clave el ide de
registro.pacientes, y a partir de ahí desarrolla el resto de su tabla propia: procedencia.paciente .
"""
# llamo al modelo
_name = 'procedencia.paciente'
_inherit = 'registro.paciente'
# este modelo tiene su propia tabla pero hereda el indice de registro de pacientes
# Aquí empieza la tabla de procedencia.paciente

Pero me da erro 500 el servidor.

EN resumen, solo quiero que cuando creo una ficha de registro luego pueda crear una ficha de procedencia
seleccionando el id de registro (ideal sería que crease automáticamente le ficha de procedencia con
el id de registro cada vez que creo un registro, aunque la nueva ficha de procedencia este solo
llena en campo Número de Procedencia.

Un saludo y gracias por su atención,
Marco garcia Batuan.

Gustavo Orrillo

unread,
Jan 27, 2017, 6:18:38 AM1/27/17
to odoo-ar...@googlegroups.com
Tenes que sacar el inherit
Sakudos

--
Recuerda siempre poner la mayor cantidad de datos para que se entienda bien que necesitas y que respondes. Algunos errores comunes:
 
- Siempre mencionar en que versión de odoo trabajas.
- Siempre mencionar si el servidor esta en LINUX o en windows y en que versión.
- No alcanza con colocar el debug del error, debes indicar que necesitas que haga el código.
- Comparte tu código en un servidor abierto como Github, Launchpad u otro.
- Si haces un manual, tutorial o algo de interés comunal, trata de usar google docs.
 
Tu tiempo es tan valioso como el de cualquiera de la comunidad. Aquí se valora el aporte que hagas. Cuanto mas ayudes mas ayuda recibirás.
 
Nuestras normas mínimas de convivencia puede leerlas en https://groups.google.com/d/forum/odoo-argentina?hl=es-ES
---
Has recibido este mensaje porque estás suscrito al grupo "odoo-Argentina - Preguntas y respuestas para personalizadores" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a odoo-argentina+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a odoo-argentina@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Gustavo Marino

unread,
Jan 27, 2017, 8:05:05 AM1/27/17
to odoo-Argentina - Preguntas y respuestas para personalizadores
Marco:
Odoo no maneja polimorfismo.
Si heredas de un modelo que tiene una relación one2many, los registros serán identificados con el id del modelo base. No es utilizable en el modelo heredado
Basicamente, cada modelo tiene ids que solo son válidos para objetos de este modelo, no para modelos que heredan de este.

Tenés que buscar otra manera de modelar 'procedencia.paciente'

Daniel Blanco

unread,
Jan 27, 2017, 4:27:21 PM1/27/17
to odoo-Argentina - Preguntas y respuestas para personalizadores
Yo modelaría procedencia.paciente con un campo name = fields.Char('Nombre de la Procedencia')

Por otra parte, en registro.paciente no es necesario declarar el id puesto que lo hace solo. Estoy adivinando porque no conozco el proyecto, pero me da la impresión que si lo que querés hacer es definir la procedencia para el paciente, y esa procedencia se usará varias veces, lo que necesitas es un Many2one y no un One2many. En cuyo caso quedaría así:

class Pacientes(models.Model):
    _name = 'registro.paciente'

    registro = fields.Integer('Numero de Ingreso')
    procedencia_id = fields.Many2one(
        'procedencia.paciente', string='Procedencia')


class Procedencia(models.Model):
    _name = 'procedencia.paciente'

    name = fields.Char('Nombre de la procedencia')
    # eventualmente si quisieras tener los pacientes por procedencia en alguna vista, pondría también
    rpaciente_ids = fields.One2many(
        'registro.paciente', 'procedencia_id', string='Registros pacientes')



Igual, me parece que para registrar pacientes, yo me heredaría de res.partner, y caracterizaría res.partner como paciente (con un boolean) o sea que a todo esto faltaría otra relación para vincular el registro del paciente con res.partner.

La procedencia, si es una clínica por ejemplo, en realidad también podría o debería ir en res.partner. Yo marcaría a una empresa, como clinica en res.partner y con domains la filtraría en la vista. Eso sería un approach mas acorde a la filosofía de Odoo.

El jueves, 26 de enero de 2017, 12:43:53 (UTC-3), marco garcia baturan escribió:

marco garcia baturan

unread,
Jan 28, 2017, 10:07:20 AM1/28/17
to odoo-ar...@googlegroups.com
Muchas gracias a los dos, me ha servido de solución ambos consejos. Sois geniales chicos.

--
Recuerda siempre poner la mayor cantidad de datos para que se entienda bien que necesitas y que respondes. Algunos errores comunes:
 
- Siempre mencionar en que versión de odoo trabajas.
- Siempre mencionar si el servidor esta en LINUX o en windows y en que versión.
- No alcanza con colocar el debug del error, debes indicar que necesitas que haga el código.
- Comparte tu código en un servidor abierto como Github, Launchpad u otro.
- Si haces un manual, tutorial o algo de interés comunal, trata de usar google docs.
 
Tu tiempo es tan valioso como el de cualquiera de la comunidad. Aquí se valora el aporte que hagas. Cuanto mas ayudes mas ayuda recibirás.
 
Nuestras normas mínimas de convivencia puede leerlas en https://groups.google.com/d/forum/odoo-argentina?hl=es-ES
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "odoo-Argentina - Preguntas y respuestas para personalizadores" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/odoo-argentina/n4qkMxYToAA/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a odoo-argentina+unsubscribe@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages