El 7 de julio de 2015, 15:08, Antonio Roncero <[email protected]> escribió:

>
>
> El martes, 7 de julio de 2015, 11:59:56 (UTC+1), Antonio Roncero escribió:
>>
>>
>>
>> El martes, 7 de julio de 2015, 11:45:02 (UTC+1), Jordi Esteve
>> (Zikzakmedia) escribió:
>>>
>>>  On 07/07/15 12:28, Antonio Roncero wrote:
>>>
>>> Hola, sigo con mi iniciacion a la programacion. Ahora estoy con la
>>> herencia.
>>>
>>> En openerp tenia 2 tipos de herencia
>>>
>>>    - Herencia de clase: añadia campos que eran visibles en las vistas
>>>    de la clase original
>>>    - Herencia por prototipo: Creaba una nueva clase copiando las
>>>    propiedades de la clase padre
>>>    - Herencia polimorfica: permitia heredar de varias clases y creaba
>>>    una tabla nueva con la referencia al objeto de las clases heredadas y los
>>>    campos nuevos.
>>>
>>> En tryton, por lo que me ha parecido leer, solo hay una, que según he
>>> entendido es una mezcla de las dos primeras de openerp, es decir añade
>>> campos a la tabla original pero no se ven en la vista a no ser que la
>>> creemos.
>>>
>>>
>>>  ¿Como se podria tener herencia de los tipos dos? es decir, una que me
>>> cree un nuevo modelo (con su propio __name__) que herede los campos y
>>> metodos del padre. Y del tipo 3, es decir, una que me permita heredar de
>>> varias clases a la vez.
>>>
>>>
>>> Los dos casos se pueden hacer usando la herencia de Python. Las
>>> herencias de Tryton son simplemente las herencias que te proporciona el
>>> propio lenguage python.
>>>
>>> Por ejemplo mírate el módulo account_bank que permite añadir cuentas
>>> bancaris en facturas, apuntes contables, etc. Se define una clase base
>>> BankMixin (por convenio llevan la palabra Mixin al final) donde defines
>>> campos y métodos comunes y luego creas o amplias clases existentes a partir
>>> de este Mixin:
>>>
>>> class Invoice(BankMixin):
>>> class Line(BankMixin):
>>> class CompensationMoveStart(ModelView, BankMixin):
>>>
>>>
>> --
>>> Jordi Esteve
>>> Consultor Zikzakmedia [email protected]
>>> Mòbil 679 170 693
>>>
>>> Zikzakmedia SL
>>> St. Jaume, 9, baixos, 2a
>>> 08720 Vilafranca del Penedès
>>> Tel 93 890 2108
>>>
>>>
>> Gracias, le echo un vistazo. :D
>>
>
> He estado mirando estos ejemplo y en todos se hereda de una clase definida
> en el propio archivo. ¿Como tendria que hacer el import para heredar de una
> clase de otro modulo?
>
> seria algo asi?
>
> from trytond.modules.party import Party
>
>
No conozco ningún ejemplo real pero entiendo que sí. Después de importar
Party así, podrías hacer algo como esto:

Class InheritedParty(Party):
    __name__ = 'inherited.party'
   another_field = fields.Char('Another Field')

etc. En teoría esto te crearía la tabla inherited_party con los mismos
campos que party más los que añadas a esta.

Otra opción que se me ocurre es:

Class InheritedParty(ModelSQL, ModelView):
    __name__ = 'inherited.party'
    party = fields.Many2One('party.party', Party, required=True)

Y luego sobreescribir el método __getattr__() como se hace en product [1]
de forma que cada vez que hace referencia a un campo inexistente en ese
modelo, lo va a buscar a party.


[1] http://hg.tryton.org/modules/product/file/5bba92343654/product.py#l140

-- 

Jesús Martín

Zikzakmedia SL
C/ de Sant Jaume, 9, baixos, 2ª
08720 Vilafranca del Penedès
☏ 93 890 21 08

Responder a