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