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()
Вернуться на верх