2012-06-18 4 views
11

Я использую сигнал post_save от Django для отправки писем пользователям каждый раз, когда на сайт добавляется статья . Тем не менее, пользователи по-прежнему получают новые электронные письма, когда я использую метод save() для уже созданных статей. Как можно получать электронные письма только при добавлении новой записи?Django сигналы только для новой записи

Заранее спасибо

ответ

28

Сигнал post_save принимает логический аргумент created, который указывает, был ли сохранен сохраненный instance.

def my_callback(sender, **kwargs): 
    if kwargs['created']: 
     print('Instance is new') 
+0

Большое спасибо! это работало как шарм. –

0

Проверка на instance.id хороший способ определить, если экземпляр является «новый». Это работает только в том случае, если вы используете идентификаторы, которые автоматически генерируются вашей базой данных.

+0

Не будет работать на сигнале post_save IIRC - к тому времени экземпляр уже имеет идентификатор. –

2

Посмотрите на https://docs.djangoproject.com/en/dev/ref/signals/#django.db.models.signals.post_save

Там на самом деле является аргумент, передаваемый с сигналом «созданного: булевой; Истина, если новая запись была создана».

Думаю, это должно сделать трюк.

+0

Спасибо, Кристоф, я должен был внимательно прочитать это. –

Смежные вопросы