[pyar] [Django] Existe equivalente a save_model pero para delete?

Dario Ocles dario.ocles en gmail.com
Mie Ago 25 15:20:55 ART 2010


El día 23 de agosto de 2010 23:52, Nicolas Echaniz <nico en rakar.com> escribió:
> On Monday 23 August 2010 12:01:22 Dario Ocles wrote:
>> El día 23 de agosto de 2010 11:48, Nicolas Echaniz <nico en rakar.com>
> escribió:
>> > On Monday 23 August 2010 09:58:49 Daniel Moisset wrote:
>> >> 2010/8/23 Dario Ocles <dario.ocles en gmail.com>:
>> >> > Buenas gente.
>> >> >
>> >> > Estoy buscando un equivalente a save_model pero para el delete de un
>> >> > registro en el admin. El problema en cuestión es que estoy usando
>> >> > ContentTypes para relacionar varios modelos distintos pero al borrar
>> >> > un registro de algunos de esos modelos no me borra el registro en el
>> >> > modelo que centra todo gracias a ContentTypes.
>> >>
>> >> Hay un delete() en el modelo, igual que save()
>> >>
>> >> deberías ver si no corresponde usar Model.save() en vez de
>> >> ModelAdmin.save_model() ; el primero es mas apropiado si la logica que
>> >> estas poniendo se tiene que usar en todas las operaciones del modelo,
>> >> y el segundo si la logica es solo del acceso al modelo a travez de la
>> >> interfaz de admin.
>> >>
>> >> No hay un delete_model, por que no tenes ni form ni mucha info extra
>> >> para customizar (capaz en algunos casos estaría bueno tener el
>> >> request). Pero por el problema que contás, la logica que queres poner
>> >> va en el delete() del modelo.
>> >>
>> >> Lo único que hay que considerar con cuidado, es que este metodo no se
>> >> llama cuando borras desde un queryset. por ej:
>> >> Zapato.objects.filter(tamano=38).delete() , no llama nunca a
>> >> Zapato.delete()
>> >
>> > Un caso importante a tener en cuenta también es que la acción de borrar
>> > desde el changelist en el admin tampoco llama a delete().
>> > Dependiendo de la situación, puede que te convenga usar signals.
>>
>> Esto me preocupa. En la practica, toda mi aplicación solo se maneja
>> desde el admin. Hay muy poco (por no decir que no hay) código que
>> borre o cree cosas. Pero esto no quiere decir que en el futuro no
>> cambie.
>>
>> Yo lo único que quiero es que cada vez que se crea o se borra una
>> sección, se agregue y se borre de la lista de secciones.
>>
>> Recién estuve leyendo sobre signals y la que me interesa es la
>> pre_delete. Esta señal se envia siempre no importa el caso? Estuve
>> leyendo pero no encuentro una referencia que lo aclare (o algún tipo
>> de warning).
>
> Hasta donde recuerdo, sí, se envía siempre.

Muchas gracias por las respuestas, al final ya lo solucione con signals.

Ahora me surge una duda más.

Todos los modelos que necesito implementar esto extienden de un
"modelo abstracto" ya que comparten muchos datos (al modelo del que
extienden le agregue el class Meta: abstract = True ). Intente
conectar la señal post_save y post_delete a este modelo pero no anda,
asi que tuve que ir modelo por modelo conectando las dos señales con
el mismo handler para cada una.

No hay forma de conectar las señales a este modelo base? Así me ahorro
de repetir el mismo bloque de código que conecta las señales a cada
modelo y me despreocupo si alguien en el futuro agrega una nueva
sección y se olvida de conectar las señales.

Saludos y muchas gracias.



More information about the pyar mailing list