2016-11-24 5 views
1

Я занимаюсь разработкой менеджера по назначениям для офиса врача. Существует возможность создать расписание, например, если человек хочет приехать три раза в неделю (понедельник, среда и пятница) в 9:00, начиная с 01/02/17 до 02/24/17 пользователь может создать расписание, указав именно эти данные: дату начала, дату окончания, время, дни недели. Приложение сообщит об этом пользователю, если в это время уже зарегистрировано назначение, поэтому у пользователя есть возможность изменить расписание или принять в любом случае, что приведет к расписанию, которое пропустит ранее занятые встречи. Я использую рамки Джанго разработать приложение В моей Schedule модели у меня есть следующий кодDjango: Лучший способ оценить состояние

monday = models.BooleanField(default=False) 
tuesday = models.BooleanField(default=False) 
wednesday = models.BooleanField(default=False) 
thursday = models.BooleanField(default=False) 
friday = models.BooleanField(default=False) 
saturday = models.BooleanField(default=False) 

У меня возникли проблемы, выясняя лучший способ проверить, если назначение уже забронировано между датами ввода ,

Я не знаю, если вопрос ясен, так что я уеду пример:

Я хочу, чтобы запланировать встречи с 01/02/17 до 02/24/17 каждый вторник и четверг в 9 : 00. Назначение было ранее создано 01/19/17 в 9:00 для другого пациента. Приложение должно предупредить об этом пользователя.

Я хотел бы знать, если есть лучший способ проверить это, а не:

appointments = Appointment.objects.filter(date__range=[start_date, end_date]) 
for appointment in appointments: 
    if monday and appointment.weekday() == 0: 
     check if appointment time == input time 
     do something 
    elif tuesday and appointment.weekday() == 1: 
     check if appointment time == input time 
     do something 
    elif wednesday and appointment.weekday() == 2: 
     check if appointment time == input time 
     do something 
    elif thursday and appointment.weekday() == 3: 
     check if appointment time == input time 
     do something 
    elif friday and appointment.weekday() == 4: 
     check if appointment time == input time 
     do something 
    elif saturday and appointment.weekday() == 5: 
     check if appointment time == input time 
     do something 

Возможно, есть способ, чтобы извлечь из базы данных только встречи между этими датами, которые имеют те же как время ввода графика.

Надеюсь, что это несколько понятно.

ответ

0

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

days = [monday, tuesday, wednesday, thursday, friday, saturday] 
days = zip(days, range(6)) 
true_days = [d[1] for d in days if d[0]] 
appointments = appointments.filter(weekday__in=true_days) 

Таким образом, вы получите только те назначения, которые в рабочие дни соответствуют истинному будни.

EDIT: Я не заметил, что будний день - это метод. Вы можете фильтровать встречи в петле, затем:

new_appointments = [] 
for a in appointments: 
    if a.weekday() in true_days: 
     check if a time == input time 
     do something