[pyar] [django] Extender modelo de una reusable app con metodos nuevos
Luis Masuelli
luismasuelli en hotmail.com
Mie Sep 18 12:54:48 ART 2013
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, 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
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20130918/9130cd70/attachment.html>
More information about the pyar
mailing list