Django Отправка оповещений по электронной почте только о новых оповещениях
Я пытаюсь отправить оповещения по электронной почте для всех новых оповещений, которые только что были созданы. Я пробовал
last_alert = Alert.objects.filter(kiosk=kiosk).last()
Но при этом срабатывает только последнее предупреждение и все время одно и то же. Можно сделать так, чтобы одновременно срабатывало 3 оповещения. Я пытаюсь реализовать флаг, чтобы знать, было ли отправлено оповещение или нет. Возможно, я неправильно использую latest.
last_alert = Alert.objects.filter(kiosk=kiosk).latest('pk')
if last_alert.created_on:
alert_status = HTTP_208_ALREADY_REPORTED
send_alert_email = False
else:
alert_status = HTTP_201_CREATED
send_alert_email = True
last_alert.created_on = datetime.now(last_alert.kiosk.location.timezone)
Alert.create(kiosk=kiosk, created_on=datetime.now(last_alert.kiosk.location.timezone))
last_alert.save()
# Get Timezone aware date and time
current_dt = datetime.now().astimezone(kiosk.location.timezone)
current_time = current_dt.strftime('%I:%M %p')
current_date = current_dt.strftime('%m/%d/%Y')
email_props2 = {
'method': 'EMAIL',
'email': 'john@example.com',
'data': {
'facility': last_alert.kiosk.location.name,
'description': last_alert.description,
'pk': last_alert.pk,
'time': current_time,
'date': current_date,
'kioskName': kiosk.name,
'alert_type_display': last_alert.alert_type_display
}
}
if send_alert_email:
_send_email(
[email_props2['email']],
{'data': email_props2['data']},
ALERT_TEMPLATE_ID
)
Возможно, я неправильно подхожу к этой проблеме с помощью флага. Любая помощь будет очень признательна.
спасибо заранее
У меня есть решение. Я добавил поле processed в модель оповещений по умолчанию False. Затем фильтрую все оповещения с полем processed=False. Перебираем все оповещения, если processed=False отправляем письмо, затем устанавливаем processed=True.
last_alert = Alert.objects.filter(kiosk=kiosk, processed=False)
# Get Timezone aware date and time
for alert in last_alert:
if alert.processed == False:
current_dt = datetime.now().astimezone(kiosk.location.timezone)
current_time = current_dt.strftime('%I:%M %p')
current_date = current_dt.strftime('%m/%d/%Y')
email_props2 = {
'method': 'EMAIL',
'email': 'john@example.com',
'data': {
'facility': alert.kiosk.location.name,
'description': alert.description,
'pk': alert.pk,
'time': current_time,
'date': current_date,
'kioskName': kiosk.name,
'alert_type_display': alert.alert_type_display
}
}
# Straight up send it, dude
_send_email(
[email_props2['email']],
{'data': email_props2['data']},
ALERT_TEMPLATE_ID
)
alert.processed = True
alert.save()