Найти все встречи на определенную дату
Моя цель - получить все встречи (дата_начала и время) за текущий месяц и поместить их в таблицу под датами текущего месяца. Например, показать все даты ноября (понедельник, вторник и т.д.) и под датами показать встречи, которые состоялись в этот день.
Можете ли вы предложить способ сделать это?
Моя первая попытка - получить все даты месяца (ноябрь) и показать их в шаблоне. Затем получить все встречи с начальной_датой и временем
class Appointment(models.Model):
user = models.ForeignKey(Account, on_delete=models.CASCADE)
seat = models.ForeignKey(Seat, on_delete=models.SET_NULL, null=True)
start_appointment = models.DateTimeField(default=timezone.now, blank=True)
end_appointment = models.DateTimeField(default=timezone.now, blank=True)
Например:
# Show dates of current month and show them in template
year = today.year
month= today.month
num_days = calendar.monthrange(year, month)[1]
days = [datetime.date(year, month, day) for day in range(1, num_days+1)]
print(days)
days_list = []
for days in days:
days_str = days.strftime('%A, %d')
days_list.append(days_str)
print(days_str)
#Query for the appointments, something like:
appointments = Appointment.objects.filter()....
Запрос может выглядеть следующим образом,
from django.db.models.functions import TruncMonth, TruncYear, TruncDay
appointments = Appointment.objects.filter(
start_appointment__gt="FILTERED DATETIME",
end_appointment__lte="FILTERED DATETIME"
).annotate(
year=TruncYear('start_appointment'),
month=TruncMonth('start_appointment'),
day=TruncDay('start_appointment'),
).values('year', 'month', 'day', ....)
Эта встреча будет сгруппирована по году, месяцу, дню и другим значениям, которые вам будут предоставлены. В соответствии с вашими потребностями вы можете настроить их. Более подробно вы можете прочитать в документации