Django проверяет, находится ли время в диапазоне временных полей объекта

Как проверить, находится ли время в диапазоне двух полей времени?

#appointmentApp.models Appointment


#Appointments
class Appointment(models.Model):
    ...
    date_selected = models.DateField(blank=True, default='2001-12-1')
    time_start = models.TimeField(blank=True)
    total_time = models.IntegerField(blank=False, null=False, default=0)
    end_time = models.TimeField(blank=True, null=True)
    appointment_accepted = models.BooleanField(blank=False, default=False)

Total_time и end_time рассчитываются после создания объекта, поскольку для него требуется атрибут из поля «многие ко многим».

В моих представлениях, где я хочу проверить, существует ли объект

#appointmentApp.views def appointment_view


def appointment_view(request):
        ...
   #form is submitted
    else:
        form = AppointmentForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            date = cd.get('date_selected') #this is a datetime field
            start = cd.get('time_start')
            #appointments = Appointment.objects.filter(date_selected=date, start_time__range=())
                
            #form needs to save first because total time and end time don't have values until after the object is saved

            form.save()
            new_appointment = Appointment.objects.filter(date_selected=date, time_start=start, appointment_accepted=False)
            for apps in new_appointment:
                new_app_starttime = apps.time_start
                new_app_endtime = apps.end_time
                
            appointments = Appointment.objects.filter(date_selected=date, appointment_accepted=True)

            #if the start time

            #my question is here
            for app in appointments:
                if app.time_start__range(new_app_starttime, new_app_endtime):
                    print('another appointment begins/ends during this time slot!')
                    
            return render(request, 'home.html')

Как он может проверить, попадает ли его время между двумя временными полями?

Редактировать: Просматривая эти вопросы, они были немного полезны

Фильтр Django, когда текущее время попадает между двумя значениями TimeField

Django After Midnight Work Hours Ошибка сравнения TimeField

текущий метод, который я пытаюсь использовать,

#appointmentApp.views appointment_view

    if Appointment.objects.filter(date_selected=date, time_start__lte=F('end_time')).exists():
                    print('Y E S')
                    Appointment.objects.filter(date_selected=date, time_start=start, appointment_accepted=False).delete()

Эта строка не вернула то, что я ищу, и я не уверен, где я ошибаюсь.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это не очень красивое решение, но в конце концов оно работает

этот ответ решил мой вопрос

https://stackoverflow.com/a/65572546/10485812

    #gets the appointment that is being checked
    n_a = Appointment.objects.get(date_selected=date, time_start=start, appointment_accepted=False)

    #filters for all appointments that have been accepted and share the same date as n_a
    appointments = Appointment.objects.filter(date_selected=date, appointment_accepted=True)
   
    #checks each appointment on that day and sees if the times overlap 
    for apps in appointments:
        if (apps.time_start < n_a.time_start < apps.end_time) or (apps.time_start < n_a.end_time < apps.end_time) or (n_a.time_start <= apps.time_start and n_a.end_time >= apps.end_time):

Другие вопросы по теме