Сервис для отправки электронной почты с помощью Django

#python #django

#python #django

Вопрос:

Я пытаюсь создать сервис для отправки электронной почты, если expiration_datetime составляет менее недели. То, что я хочу сделать, это отправить только один раз и не повторять. я не уверен, что мне делать

Модели:

 class License(models.Model):

    PACKAGE_CHOISES = (
    ('Production', 'Production'),
    ('Evaluation', 'Evaluation'),
    )
    LICENSE_CHOISES = (
        ('js', 'Javascript_sdk'),
        ('ios', 'Ios_sdk'),
        ('android', 'Android_sdk'),
    )

    client = models.ForeignKey('Client', on_delete=models.CASCADE)
    package = models.CharField(max_length=15, choices=PACKAGE_CHOISES, blank=True, null=True)
    license_type = models.CharField(max_length=15, choices=LICENSE_CHOISES, blank=True, null=True)
    created_datetime = models.DateTimeField(auto_now=True)
    expiration_datetime = models.DateTimeField(default=get_default_license_expiration)
  

И вот сервис, который я пытаюсь создать:

 def process_licenses():

    client = Client.objects.all()
    licesens = License.objects.all()
    clients_name = []
    hoje = datetime.today() - timedelta(days=7)
    for date in licesens:
        if hoje >= date.expiration_datetime:
            clients_name.append(date.client)

    for name in clients_name:
        if name in client:
            email = EmailMessage(
                'Test',
                'hi',
                settings.EMAIL_HOST_USER,
                [name.admin_poc],

            )
            email.fail_silently=False
            email.send()
        
    time.sleep(30)
  

Ответ №1:

Добавьте этот столбец в модель лицензии

 is_send = models.BooleanField(default=False, blank=True, null=True)

for date in licesens:
    if hoje >= date.expiration_datetime and is_send is False:
        clients_name.append(date.client)
        license_instance = License.objects.get(pk=date.pk)
        license_instance.is_send = True
        license_instance.save()