2010-05-21 10 views
5

Estoy trabajando en un proyecto de Django y quiero enviar una señal cuando algo se agrega al conjunto relacionado de algún modelo. P.ej. tenemos un propietario que tiene un conjunto de coleccionables, y cada vez que se llama al método owner.collectable_set.add(something), quiero una señal como collectable_added o algo así. Las señales son claras para mí, pero no sé qué gestor (?) Contiene el método "agregar" que quiero anular.Cómo anular el método de "agregar" de un conjunto relacionado en Django

Editar para la petición de Xavier para proporcionar más detalles: se puede reemplazar fácilmente el método de un modelo save, simplemente definiendo y llamando a la "super-save" por lo que se guarda correctamente con algunas funciones extra. Pero me pregunto dónde anular el método add de un conjunto relacionado.

Gosh, creo que no he traído más detalles, pero creo que debe quedar claro lo que quiero hacer, incluso desde el primer párrafo.

Editar 2:This es el método que deseo anular. ¿Se recomienda hacerlo, o sugiere otra forma de colocar el envío de la señal?

+0

Su pregunta es muy vaga. Si puede proporcionar un seudocódigo o tratar de explicarlo mejor, creo que más personas podrían ayudarlo. –

Respuesta

0

Creo que está buscando RelatedManager Class.

+0

Gracias por su respuesta. Parece la solución, pero olvidé mencionar que estoy tratando con una relación m2m. Entonces, en este caso, la clase ManyRelatedManager sería la que extendería o insertaría la señal. PERO no es trivial extender esta clase ya que se genera dinámicamente. Gracias de cualquier manera. Publicaré una solución que encontré pero no he probado. – mamachanko

3

Esta es la solución que encontré, la m2m_changed signal. Me tomó bastante buscar y leer. Además, descubrí que no es trivial extender la clase ManyRelatedManager, que hubiera sido la otra opción. Pero con la señal m2m_changed puedo confiar en las funciones integradas que es la forma preferida la mayor parte del tiempo.

0

Después de mucho buscar (gracias a la insinuación de este Pablo), me encontré con este snippet que ayudó a explicar la aplicación m2m_changed a intercepción no anular el método de adición del ManyRelatedManager. Parece que el administrador de una relación de muchos a muchos ocurre sobre la marcha, por lo que no es trivial anular el método.

Cuestiones relacionadas