Django - отправлять письмо при создании объекта - PullRequest
0 голосов
/ 06 апреля 2019

Как правило, чтобы отправить электронное письмо при создании объекта, я переопределил бы метод сохранения:

def save(self, *args, **kwargs):
    send_email(context)
    return super().save(*args, **kwargs)

Однако теперь мне нужен контекст, содержащий атрибут объекта, который не может бытьизвестный до сохранения объекта, а именно URL объекта File, связанного с объектом модели.

Я знаю, что это можно сделать с помощью сигнала post_save, но документы создают впечатление, что это лучше всего использовать, когдаразным моделям нужен доступ к такой информации.У меня складывается впечатление, что не рекомендуется использовать его в одной модели:

Я пробовал это:

    foo = super().save(*args, **kwargs)
    send_email(foo.document.url)
    return foo

Но foo, похоже, None.

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

Ответ Даниэля верный, но если вы хотите отправить электронное письмо только при создании объекта, а не при его обновлении, вам также следует проверить, назначен ли экземпляр pk, например:

def save(self, *args, **kwargs):
    created = self.pk is None
    return super().save(*args, **kwargs)
    if created:
        send_email(context)
0 голосов
/ 07 апреля 2019

Метод save ничего не возвращает. Но пункт self, вы можете использовать его после вызова super.

super().save(*args, **kwargs)
send_email(self.document.url)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...