根据工作日,开放和关闭时间显示餐厅是开放还是关闭

时间:2016-08-21 07:09:34

标签: python django python-3.x django-models

我有餐厅和经营时间的模型,具有外键关系。 例如,餐厅海景咖啡馆,其每个工作日的操作时间是

周五 - 上午10点 - 下午6:30

周四 - 上午10点 - 下午9:45

周三 - 上午10点 - 下午9:45

周二 - 上午10点 - 下午9:45

周一 - 上午10点 - 下午9:45

周日 - 上午10点 - 晚上8点

我只能根据这样的开启和关闭时间进行检查

models.py

class OperatingTime(models.Model):
    MONDAY = 1
    TUESDAY = 2
    WEDNESDAY = 3
    THURSDAY = 4
    FRIDAY = 5
    SATURDAY = 6
    SUNDAY = 7

    DAY_IN_A_WEEK = (
        (MONDAY, 'Monday'),
        (TUESDAY, 'Tuesday'),
        (WEDNESDAY, 'Wednesday'),
        (THURSDAY, 'Thursday'),
        (FRIDAY, 'Friday'),
        (SATURDAY, 'Saturday'),
        (SUNDAY, 'Sunday'),
        )
    # HOURS = [(i, i) for i in range(1, 25)]
    restaurant = models.ForeignKey(Restaurant,related_name="operating_time")
    opening_time = models.TimeField()
    closing_time = models.TimeField()
    day_of_week = models.IntegerField(choices=DAY_IN_A_WEEK)

    @property
    def open_or_closed(self):
        operating_time = OperatingTime.objects.all()
        opening_time = operating_time.opening_time
        closing_time = operating_time.closing_time
        current_time =  datetime.now().time()
        weekday = operating_time.day_of_week
        if opening_time < current_time < closing_time:
            open_or_closed = True
        else:
            open_or_closed = False 
        return open_or_closed


@property
def open_or_closed(self):
    operating_time = OperatingTime.objects.all()
    opening_time = operating_time.opening_time
    closing_time = operating_time.closing_time
    current_time =  datetime.now().time()
    weekday = operating_time.day_of_week
    if opening_time < current_time < closing_time:
        open_or_closed = True
    else:
        open_or_closed = False 
    return self.open_or_closed

如果所有餐厅的餐厅每天都开放或关闭,我该如何找到?

1 个答案:

答案 0 :(得分:0)

未经测试但应该可以使用。

class OperatingTimeManager(models.Manager):
    # Use a model manager when accesing table data, use model methods only for row operations

    def get_open_restaurants(self, date=datetime.datetime.now()):
        # get the id's of open restaurants
        open_restaurants_ids = self.get_queryset().filter(opening_time__lte=date, closing_time__gt=date).values_list('restaurant__id', flat=True)
        # get the actual restaurants instances
        return Restaurant.objects.filter(id__in=open_restaurants_ids)


class OperatingTime(models.Model):
    closing_time = fields.DateTimeField()
    opening_time = fields.DateTimeField()
    restaurant = fields.ForeignKey(Restaurant)

    objects = OperatingTimeManager()
相关问题