2016-11-24 4 views
1

私は医者のオフィスの予定マネージャーを開発しています。 スケジュールを作成するオプションがあります。例えば、週に3回(月曜日、水曜日、金曜日)に来ることを希望する場合は、01/02/17から9:00まで、02/24/17まで開始日、終了日、時刻、曜日などのデータを入力するだけでスケジュールを作成できます。 アプリはその時間に予定がすでに予約されているため、スケジュールを変更するか受け入れてもらうことができます。これにより、以前に占有していた予定をスキップするスケジュールが作成されます。 私は次のコード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) 

を持っている私のScheduleモデル予定がすでに入力された日付の間に予約されている場合、私はトラブルをチェックするための最良の方法を考え出すを抱えているではアプリ を開発するためのDjangoフレームワークを使用しています。

私は例を残しておきますので、問題がクリアされている場合は、私にはわからない:

私は9時毎週火曜日と木曜日02/24/17に01/02/17から予定をスケジュールしたいです:00。 もう1人の患者のために、01/19/17に9時に予定が作成されました。アプリはこれをユーザーに警告する必要があります。

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) 

ですから、平日はtrueに対応のみの予定を、になるだろう平日。

編集: 私は平日は方法であることに気付かなかった。ループ内の予定をフィルタすることができます。

new_appointments = [] 
for a in appointments: 
    if a.weekday() in true_days: 
     check if a time == input time 
     do something 
関連する問題