[pyar] [django] Extender modelo de una reusable app con metodos nuevos

Andres Riancho andres.riancho en gmail.com
Mie Sep 18 13:42:51 ART 2013


Luis,

2013/9/18 Luis Masuelli <luismasuelli en hotmail.com>:
> Va a ser croto MUY CROTO lo que te voy a decir, pero yo estoy haciendo eso
> en una aplicacion para que a propósito "extienda" el modelo que sea que se
> use como usuario (es decir: extienda el modelo que se obtiene mediante
> get_user_model()).
>
> Lo que hiciste de los campos es algo mas o menos nuevo para mi :p.
>
> En cuanto a los metodos la cosa es mas sencilla, por lejos, aunque
> desprolija:
>
> from django.contrib.auth import get_user_model
> UserClass = get_user_model()
> def mi_metodo(self, parametros...):
>     pass #cambia esto por el código que le quieras poner
> UserClass.metodo = mi_metodo
>
> No es algo para nada de django, es python puro,

Claro, eso es monkey-patching, algo que pense que no iba a tener que
hacer pero con cada respuesta que voy recibiendo me parece que me
acerco mas a eso... En general cuando pregunto cosas como esto, espero
que alguien responda: "No seas bruto, la manera documentada para hacer
esto es XYZ!". Por lo que veo, o nadie la sabe o no existe.

> y una vez atroden UserClass
> va a tener un atributo de tipo UnboundMethod que va a ... bueno el resto es
> la magia interna de python para cualquier clase new-style.
>
> ________________________________
> Date: Wed, 18 Sep 2013 12:40:24 -0300
> From: rafael.ferrero en gmail.com
> To: pyar en python.org.ar
> Subject: Re: [pyar] [django] Extender modelo de una reusable app con metodos
> nuevos
>
>
> El 18 de septiembre de 2013 12:33, Daniel Moisset <dmoisset en machinalis.com>
> escribió:
>
> si realmente le queres meter mano a la otra clase y lo haces por
> monkeypatching, me parece que puede ser mas manejable escribir un mixin, y
> agregarlo al bases de la clase que monkeypatcheas, asi podes tener todo mas
> o menos junto.
>
> Si solo queres tener unos metodos extra, por ahi usar proxy models es la
> forma mas estandar en django de hacerlo
>
> Saludos,
>     D.
>
>
>
> 2013/9/18 Andres Riancho <andres.riancho en gmail.com>
>
> Rafael,
>
>     No lo probe realmente, pero asumo que no va a andar porque despues
> la reusable app no va a usar "bar" para hacer todas las cosas de
> manera interna, va a seguir usando su "foo" (porque va importar ese
> objeto desde la reusable app, no el "bar" que yo modifique). Ademas
> asumo que va a haber problemas con los modelos a nivel de BD
>
> 2013/9/18 Rafael E. Ferrero <rafael.ferrero en gmail.com>:
>> no se yo me imagino:
>>
>>
>> from reusable_app.models impor foo
>>
>> class bar(foo):
>>     my_new_field = models....
>>
>>    def mi_methodo()
>>
>>
>>
>> El 18 de septiembre de 2013 12:09, Andres Riancho
>> <andres.riancho en gmail.com>
>> escribió:
>>>
>>> Lista,
>>>
>>>     Estoy intentando extender un modelo de una reusable app de la mejor
>>> manera posible. Hasta ahora, y como habia solo extendido el modelo con
>>> nuevos fields use `contribute_to_class`:
>>>
>>> from reusable_app import Foo
>>> models.CharField(max_length=255).contribute_to_class(Foo,
>>> 'short_description')
>>>
>>>     Eso me funciono bien, pero ahora estoy queriendo extender el modelo
>>> con metodos nuevos. No encontre una manera documentada/soportada/correcta
>>> de
>>> hacer esto, existe? Estoy queriendo evitar  mantener mi propio fork de la
>>> reusable app, entiendo que podria copiar toda la app a mi repositorio,
>>> modificarla, agregarla a INSTALLED_APPS, etc. pero no lo veo como una
>>> buena
>>> practica.
>>>
>>>     Lo que si encontre fue django-extend-model [0], una reusable
>>> application que te permite monkey-patchear la clase del modelo original
>>> para
>>> extenderla con nuevos fields y metodos. Alguien la usa?
>>>
>>> [0] https://github.com/mikexstudios/django-extend-model
>>>
>>> Saludos,
>>> --
>>> Andrés Riancho
>>> Project Leader at w3af - http://w3af.org/
>>> Web Application Attack and Audit Framework
>>> Twitter: @w3af
>>> GPG: 0x93C344F3
>>>
>>> _______________________________________________
>>> pyar mailing list pyar en python.org.ar
>>> http://listas.python.org.ar/listinfo/pyar
>>>
>>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>>
>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>> Argentina - http://www.usla.org.ar
>>
>>
>>
>>
>> --
>> Rafael E. Ferrero
>>
>> _______________________________________________
>> pyar mailing list pyar en python.org.ar
>> http://listas.python.org.ar/listinfo/pyar
>>
>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>
>
>
> --
> Andrés Riancho
> Project Leader at w3af - http://w3af.org/
> Web Application Attack and Audit Framework
> Twitter: @w3af
> GPG: 0x93C344F3
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
>
> Yo los seguí hasta lo de monkeypatching, ahí tiré la chancleta jaja... yo
> pensaba más en extender la reusable_app en una aplicación propia y usar la
> aplicación propia. Más o menos como lo que se suele usar cuando se extiende
> de auth (extendes auth para darle más datos a User, para sobreescribir
> métodos o lo que sea) pero despues usas tu clase extendida.
>
> Desconozco cuáles son tus requerimientos, pero la pensé por ese lado.
>
> Saludos,
>
> --
> Rafael E. Ferrero
>
> _______________________________________________ pyar mailing list
> pyar en python.org.ar http://listas.python.org.ar/listinfo/pyar PyAr - Python
> Argentina - Sitio web: http://www.python.org.ar/ La lista de PyAr esta
> Hosteada en USLA - Usuarios de Software Libre de Argentina -
> http://www.usla.org.ar
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar



-- 
Andrés Riancho
Project Leader at w3af - http://w3af.org/
Web Application Attack and Audit Framework
Twitter: @w3af
GPG: 0x93C344F3


More information about the pyar mailing list