[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