Publicidad

lunes, 20 de enero de 2014

RELACIONES ENTRE OBJETOS.

MANEJO DE CAMPOS RELACIONALES EN Odoo (OPENERP)


one2many (de uno a muchos).

Una relación de uno a muchos sería por ejemplo la relación entre autores y libros. Un autor puede tener escritos varios libros, y varios libros pueden pertenecer a un autor. La relación sería de 1 a N.

Ejemplo de definición de la clase autor:

class mybookstore_author(osv.osv):
   _name ='mybookstore.author'
   _description ='Autores'
   _columns= {
      'name': fields.char('Name', size=64, required="True"),
      'active': fields.boolean('Active'),
      'book_ids': fields.one2many('mybookstore.book', 'author_id', 'Books'),
   }

mybookstore_author()

'book_ids': Nombre de campo que usamos para relacionarlo con la tabla libro.
   Como en este campo va a haber muchos Ids de libros, el nombre del campo acaba   en “_ids”. Como norma el nombre del campo será <objeto>_ids.

'mybookstore.book': Nombre del objeto con el cuál queremos relacionar la tabla.

'autor_id': IMPORTANTE, es el nombre del campo que hemos puesto en la tabla   libro para relacionarla con la tabla autor. Para ver esto, se ha puesto en color rojo  en los dos ejemplos de definición de las tablas autores, y libros.

'Books': Literal que mostrará el campo.

many2one (de muchos a uno).

Sería la contrapartida del punto anterior. En este caso estamos hablando de que muchos libros, pertenecen a un autor. Ejemplo de definición de la clase libro:

class mybookstore_book(osv.osv):
   _name ='mybookstore.book'
   _description ='Libros'
   _columns= {
      'name': fields.char('Name', size=64, required="True"),
      'pagenumber': fields.integer('Page Number'),
      'author_id': fields.many2one('mybookstore.author', 'Author'),
   }
mybookstore_book()

'autor_id': Nombre de campo que usamos para relacionarlo con la tabla autor.
   Como en este campo va a haber un id de autor, el nombre de campo acaba en   “_id”. Como norma el nombre del campo será <objeto>_id.

'Author': Literal que mostrará el campo.

many2many (de muchos a muchos).

Una relación de muchos a muchos sería por ejemplo la relación entre cantantes y canciones. Un cantante puede cantar varias canciones, y una canción puede ser cantada por varios cantantes. La relación sería de N a N.

Ejemplo de definición de la clase cantante:

class singer(osv.osv):
    _name = 'singer'
    _description = 'Singers'

    _columns = {
            'name':fields.char('Name', size=64, required=True),

############################################################
#            EXPLICACIÓN DE LOS PARAMETROS DE many2many 
#            'songs': Objeto con el cual relaciono el objeto cantante
#            'auth_songs_rel': Nombre que pongo a la relación de las 2 tablas
#            'author_id': ID del campo de la tabla actual.
#            'songs_id': ID del campo de la tabla que quiero relacionar.
#            'Songs': Literal que mostrará el campo
############################################################

            'songs_ids' :  fields.many2many('songs','auth_songs_rel','author_id','songs_id','Songs'),
            'active': fields.boolean('Active'),
            'song_ids' : fields.one2many('song', 'author', 'Singing songs'),
        }
 
author()

Esta relación solo hay que hacerla en un objeto, o en los dos, concretamente pondremos esta relación en los objetos que queremos que se muestren.

1 comentario:

  1. Yo quiero crear un campo personalizado de MuchosAUno del modelo product.pricelist pero no quiero que se muestre el nombre de la lista de precios sino la moneda de la lista de precios ¿como hago? agradeceria su ayuda

    ResponderBorrar