Django - Показать даты назначенных встреч

Я хочу показать даты, на которые не забронированы встречи в шаблоне. Для этого у меня пока есть:

# Collect only the dates so that i can find what is not in that range.
example_dates = Appointment.objects.values_list('start_appointment', flat=True)

# Initialize start and end date
start_date = datetime.date.today()
end_date = start_date + datetime.timedelta(days=5)

# Initialize new list that will include records does not exists
not_found_dates = []

# Loop through in date range and if date does not exists 
# Create a dict and add it to the list
for n in range(int((end_date - start_date).days)):
    new_date = start_date + datetime.timedelta(days=n)
    if new_date not in not_found_dates:
        not_found_dates.append(new_date)
        print(new_date)

# Get original queryset
examples = Appointment.objects.filter(start_appointment__range=(start_date, end_date)).values('start_appointment')
print(examples)

# Convert it to a list
examples = list(examples)

return render(request, 'appointments/add-appointment.html', {'examples': examples, 'not_found_dates': not_found_dates})

Когда я печатаю new_date из цикла, я получаю: 2021-11-22 2021-11-23 2021-11-24 2021-11-25 2021-11-26

А запрос из examples возвращает, что у меня есть 3 встречи в базе данных в этом диапазоне (2) на 2021-11-23 и (1) на 2021-11-22.

Возможно ли показать даты, которые не забронированы, т.е. 2021-11-24, 2021-11-25, 2021-11-26.

Вы получите список дат в определенном временном интервале (с продолжительностью num_days) с датами, которые не являются частью запроса:

from datetime import date, timedelta

num_days = 5
start_date = date.today()
timeframe = [start_date + timedelta(days=d) for d in range(num_days)]
exclude = list(Transaction.objects.values_list("start_appointment", flat=True).distinct())

set(timeframe) - set(exclude)
Вернуться на верх