2014-06-25 33 views
1

我正在嘗試處理諸如酒吧之類的業務,在Django中查詢與午夜重疊的多個營業時間範圍

星期六:上午9時 - 下午3點,然後晚上10點重新開放 - 上午04 #multiple打開/關閉

週日:上午11點 - 晚上8點

星期一:關閉

週二至週五上午9點 - 晚上9點#would是每個工作日在DB中都是一排

我也在酒吧裏儲存特別活動,這些活動也有類似上述的可用時間範圍他們可以向客戶提供。

移動應用程序將請求JSON中的條形對象數組,其中嵌套的開放時間和嵌套在條形對象內的特殊項。隨後每件特別的東西嵌套特殊的時間。我正在使用Django-Rest。

我很關心在爲大集合生成輸出時查詢過程的空間複雜性和時間複雜度。當可能有辦法將它簡化爲DateTime Ranges時,也將23:59:59放在每個地方似乎都是錯誤的。

import datetime 
from django.db import models 
WEEKDAYS = [ 
    (1, "Monday"), 
    (2, "Tuesday"), 
    (3, "Wednesday"), 
    (4, "Thursday"), 
    (5, "Friday"), 
    (6, "Saturday"), 
    (7, "Sunday"), 
] 

class Bar(models.Model): 
    name = models.CharField(max_length=200) 
    location = models.CharField(max_length=200, blank=True) 


class Special(models.Model): 
    bar = models.ForeignKey(Bar, related_name="availablespecials") 
    name = models.CharField(max_length=500) 
    price = models.FloatField() 

"""The bar's businesses hours"""  
class OpeningHour(models.Model): 
    bar = models.ForeignKey(Bar, related_name="baropeninghours") 
    weekday = models.IntegerField(choices=WEEKDAYS) 
    from_hour = models.TimeField() 
    to_hour = models.TimeField() 

"""The ranges for when a special is available""" 
class SpecialHour(models.Model): 
    special = models.ForeignKey(Special, related_name="specialopeninghours") 
    weekday = models.IntegerField(choices=WEEKDAYS) 
    from_hour = models.TimeField() 
    to_hour = models.TimeField() 

越來越棒的輸出

"results": [ 
     { 
      "name": "Santa's Brew House", 
      "Address": "123 Ho Ho Ho Street", 
      "gps_latitude": 90.00000, 
      "gps_longitude": 0.00000, 
      "baropeninghours": [ 
       #This would mean santas place is open from 10pm to 4am 
       "Saturday 22:00:00 to 23:59:59" 
       "Sunday 00:00:00 to 04:00:00", 
      ], 
      "availablespecials": [ 
       { 
        "name": "Captain's Mast", 
        "specialopeninghours": [ 
         "Monday 00:00:00 to 23:59:59", 
         "Tuesday 00:00:00 to 23:59:59", 
         "Wednesday 00:00:00 to 23:59:59", 
         "Thursday 00:00:00 to 23:59:59", 
         "Friday 00:00:00 to 23:59:59", 
         "Saturday 00:00:00 to 23:59:59", 
         "Sunday 00:00:00 to 23:59:59" 
        ] 
       }, 
       { 
        "name": "Aggie Punch", 
        "specialopeninghours": [ 
         "Saturday 00:00:00 to 23:59:59", 
         "Sunday 00:00:00 to 23:59:59" 
        ] 
       } 
      ] 
     }]... continued for each bar 

回答

1

如果酒吧是在星期一早上,直到凌晨3點,我不會認爲這是「開放」在這一天開放的,而是說是關閉星期天的時間。所以這裏的時間太少了。

from_hour = models.TimeField() 
    to_day = models.IntegerField(choices=WEEKDAYS) 
    to_hour = models.TimeField() 

您的客戶端代碼可以弄清楚如何呈現最佳效果(如果to_day和weekday相同,可以忽略它)。

您的JSON:

... 
     "baropeninghours": [ 
      "Saturday 22:00:00 to Sunday 3:00:00" 
... 

... 
     "baropeninghours": [ 
      "Tuesday 10:00:00 to Tuesday 22:00:00" 
...