Модель Django автоматически обновляет статус, когда срок действия лекарства истек

Как автоматически обновить статус лекарства, если срок его годности истек? Например, я создал запись о лекарстве и установил дату истечения срока годности на июль 2022 года, если текущая дата больше даты истечения срока годности, она обновит статус лекарства на "Просрочено", Как мне это сделать?

class Medicine(models.Model):
    medstatus = [
        ("Expired", "Expired"),
        ("Active", "Active")
    ]
    description = models.CharField(max_length=50, null=True)
    expirationDate = models.DateField(null=True)
    status = models.CharField(max_length=50, choices=medstatus,  null=True)

Создать crontab для одного раза в день

#this is example for each day 00:00 sending get request to you api
0 0 * * * /usr/bin/curl --silent http://example.com/your_views_url/ &>/dev/null

Это хороший и простой для понимания генератор cronjob:

https://crontab.guru/#0_0_*_*_*

Cronjob запустит представление, которое будет искать лекарство и изменять его статус:

ulrs.py

path("your_views_url", views.your_view_name_here),

views.py

from django.http import HttpResponse
from datetime import datetime

def your_view_name_here(request):
    now = datetime.today()
    
    #this will return a queryset of all medecine which you need to change status
    all_target_medecine = Medicine.objects.filter(medstatus = "Active", expirationDate__lt = now)

    for medecine in all_target_medecine:
        medecine.medstatus = "Expired"
        medecine.save()
    return HttpResponse("Ok")
Вернуться на верх