Python: Сравнение даты и массовое обновление некоторых полей

Я создал функцию обновления для моего модуля событий, в которой, если дата события уже прошла, она будет массово обновлять статус до 0. models.py

class Events(models.Model):
    id = models.AutoField(db_column='id', primary_key=True)
    title = models.CharField(max_length=45, blank=True, null=True)
    venue = models.CharField(max_length=45, blank=True, null=True)
    date = models.DateTimeField(max_length=45, blank=True, null=True)
    description = models.CharField(max_length=255, blank=True, null=True)
    image = models.ImageField(upload_to=eventpath, blank=True, null=True)
    manager = models.CharField(max_length=100, blank=True, null=True)
    attendees = models.CharField(max_length=100, blank=True, null=True)
    date_posted = models.DateTimeField(max_length=45, blank=True, null=True)
    status = models.BooleanField(default=1)

Вот как я добавляю событие.

def uploadEvent(request):
    if request.method == "POST":
        item = Events()
        item.title = request.POST.get('title')
        item.venue = request.POST.get('venue')
        date = request.POST.get('date')
        date_object = datetime.datetime.strptime(date, '%a %b %d %Y %I:%M %p')
        item.date = date_object
        item.manager = request.POST.get('manager')
        item.attendees = request.POST.get('attendees')
        item.description = request.POST.get('description')
        date_posted = datetime.datetime.strptime(date, '%a %b %d %Y %I:%M %p')
        item.date_posted = date_posted
        if len(request.FILES) != 0:
            item.image = request.FILES['image']

        item.save()
        return redirect('/amsai/events/')

    return render(request, 'admin/events_add.html')

Вот как я хочу обновлять все события. Я преобразовал obj.date в date()

def refreshEvent(request):
   events = Events.objects.all()
   status = 0
   date = datetime.datetime.today().date()
   if events:
       for obj in events:
           if obj.date.date() < date:
               Events.objects.filter(*****).update(status=status)
   return redirect('/amsai/events/')

Проблема в том, как я могу отфильтровать эти переданные даты? Я не знаю, что написать внутри filter().

Это асимптотически более эффективно.

def refreshEvent(request):
    Events.objects.filter(date__lt=datetime.now()).update(status=False)
    return redirect('/amsai/events/')

Теперь filter() выполняет поиск в базе данных напрямую и выдает QuerySet, содержащий Events такой, что Events.date равен __lt (меньше, чем) datetime.now().

Не волнуйтесь, QuerySet ленивы, поэтому QuerySet, созданный filter(), даже не будет оценен, пока не будет вызван update().

Вернуться на верх