Necesito enviar un correo electrónico cuando se crea una nueva instancia del modelo Entry
a través del panel de administración. Así que en models.py
tengo:Acceso a datos relacionados de la instancia del modelo recién creado usando el manejador de señal post_save
class Entry(models.Model):
attachments = models.ManyToManyField(to=Attachment, blank=True)
#some other fields
#...
sent = models.BooleanField(editable=False, default=False)
Entonces estoy registring función de controlador post_save:
def send_message(sender, instance, **kwargs):
if not instance.sent:
#sending an e-mail message containing details about related attachments
#...
instance.sent = True
instance.save()
post_save.connect(send_message, sender=Entry)
Funciona, pero como he mencionado antes, también necesito para tener acceso a los archivos adjuntos relacionados para incluir sus datos en el mensaje. Desafortunadamente, instance.attachments.all()
devuelve la lista vacía dentro de la función send_message
, incluso si los archivos adjuntos realmente se han agregado.
Como me di cuenta, cuando se envía la señal post_save, los datos relacionados del modelo guardado no se guardan aún, por lo que no puedo obtener archivos adjuntos relacionados desde ese lugar. La pregunta es: ¿puedo lograr esto usando señales, o de cualquier otra manera, o tengo que poner este código de envío de correo electrónico afuera, por ejemplo anulando la vista de cambio del panel de administración para el modelo Entry
?
Gracias. Eso debería ser lo que necesito. Trataré de hacerlo de esta manera. – Dzejkob