Usando Pre_delete Signal en django

En mi aplicación quiero mantener un registro de todas las preguntas que se eliminan. Y así he creado una clase (tabla) como tal en mi archivo de modelos.

class Deleted(models.Model): question = models.IntegerField(null=True, blank=True)#id of question being deleted user = models.IntegerField(null=True, blank=True)#id of user deleting the question dt = models.DateTimeField(null=True, blank=True)#time question is deleted 

Cuando un usuario intenta eliminar una pregunta, esta función de eliminación se llama:

 def delete_questions(request, user, questions): for q in questions: q.delete() 

Mi duda es cómo puedo hacer una señal de pre-eliminación de django para completar la nueva tabla que he creado.

~ novato intentando una gran tarea ~ Gracias de antemano 🙂

Usted comienza definiendo el receptor que desea usar:

 def log_deleted_question(sender, instance, using, **kwargs): d = Deleted() d.question = instance.id d.dt = datetime.datetime.now() # consider using auto_now=True in your Deleted definition # not sure how you'd get the user via a signal, # since it can happen from a number of places (like the command line) d.save() 

Luego define tu receptor decorador:

 from django.db.models.signals import pre_delete from django.dispatch import receiver @receiver(pre_delete, sender=Question, dispatch_uid='question_delete_log') 

Añadirlo en total:

 from django.db.models.signals import pre_delete from django.dispatch import receiver @receiver(pre_delete, sender=Question, dispatch_uid='question_delete_signal') def log_deleted_question(sender, instance, using, **kwargs): d = Deleted() d.question = instance.id d.dt = datetime.datetime.now() d.save() 

Puede poner esta función en su archivo models.py , ya que sabe que se cargará y conectará correctamente.

Sin embargo, el problema es que no obtiene el usuario que solicita la eliminación. Dado que se puede desencadenar una eliminación desde la api de django (línea de comando, shell, etc.), que no tiene una solicitud asociada. Por este motivo, es posible que desee evitar el uso de señales si es absolutamente importante que almacene al usuario junto con la eliminación.