Как получить пункты Todo с сегодняшним днем в качестве крайнего срока

Итак, я все еще создаю свое приложение для списка дел, и я хочу отобразить все пункты, у которых сегодняшняя дата является крайним сроком, чтобы напомнить пользователю об ожидающих его задачах.

models.py

from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class ToDo(models.Model):
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    todo = models.CharField(max_length=50)
    description = models.TextField(max_length=200, blank=True)
    created = models.DateField(auto_now=True)
    end = models.DateField()
    start = models.DateField()
    completed = models.BooleanField(default=False)

    def __str__(self):
        return f'{self.owner} - {self.todo}'

views.py

def index(request):
    activities = ToDo.objects.all()
    today = ToDo.objects.get(end=datetime.date.today)
    todo = ToDo.objects.count()
    complete = ToDo.objects.filter(completed=True).count()
    percent = complete * 100 // todo 
    if request.method == 'POST':
        try:
            search = request.POST.get('todo')
            activities = ToDo.objects.filter(todo__icontains=search)
            
        except:
            search = request.POST.get('end')
            activities = ToDo.objects.filter(end=search)

    context = {
        'activities' : activities,
        'percent' : percent,
        'today' : today,
    }
    return render(request, 'home.html', context)

Я импортировал DateTime в моем views.py

Попробуйте

from django.utils import timezone

def index(request):
    today = timezone.localtime(timezone.now())

    deadline_today = ToDo.objects.filter(
        end__year=today.year,
        end__month=today.month,
        end__day=today.day
    )

    context = {
        ...
        'today' : deadline_today ,
    }

Вы почти у цели!

today = ToDo.objects.get(end=datetime.date.today)

В чем проблема. get() используется для получения одной строки, вам нужны все совпадающие строки, что делается filter. Вы также отправляете в функцию today, вместо того, чтобы вызвать ее с помощью today().

Сделайте следующее:

today = ToDo.objects.filter(end=date.today())
Вернуться на верх