Django:评估条件的最佳方式

时间:2016-11-24 19:49:18

标签: python django database

我正在为医生办公室开设一个任命经理。 有一个选项可以创建一个时间表,例如,如果一个人想要一周三次,(星期一,星期三和星期五)从2017年2月1日开始的9:00到2017年2月24日,用户可以通过仅提供该数据来创建计划:开始日期,结束日期,时间,一周中的几天。 如果在该时间内已经预约了约会,则应用程序将提醒用户,因此用户可以选择更改计划或接受,这将创建跳过先前占用的约会的计划。 我正在使用django框架来开发应用程序 在我的Schedule模型中,我有以下代码

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)

我无法找出检查预约是否已在预定输入日期之间预约的最佳方式。

我不知道问题是否清楚,所以我会留下一个例子:

我希望每周二和周四9:00安排从2017年2月1日到02/24/17的约会。 之前的预约是在2017年1月19日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

也许有一种方法可以从数据库中仅检索那些与日程安排输入时间相同的日期之间的约会。

希望这有点可以理解。

1 个答案:

答案 0 :(得分: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)

所以你只能得到那些约会,其中工作日对应于真正的工作日。

编辑: 我没有注意到工作日是一种方法。您可以在循环中过滤约会:

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