【问题标题】:Show if restaurant is open or not in current time and day显示餐厅在当前时间和日期是否营业
【发布时间】:2016-08-20 09:23:57
【问题描述】:

我有两个模型,一个用于餐厅,另一个用于营业时间。营业时间与餐厅有外键关系,因为一周内不同天的营业时间可能不同。我想显示餐厅在当前时间和当天是开放还是关闭。在views.py中编写代码或为此创建模板标签会更好吗?因为约定说视图应该是薄的。

餐厅和营业时间的模型是

class Restaurant(models.Model):
    owner = models.ForeignKey(User)
    name = models.CharField(max_length=150, db_index=True)
    address = models.CharField(max_length=100)


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)

    def __str__(self):
        return '{} ---- {}'.format(self.opening_time, self.closing_time)

views.py

def home(request):
    restaurant = Restaurant.objects.all()
    print('restaurant',restaurant)
    operating_time = OperatingTime.objects.all()
    print('operating time',operating_time)
    for operating_time in operating_time: # Tried to find if restaurant is opened or closed based on opening time & closing time in current time and day for each restaurant
        opening = operating_time.opening_time
        closing = operating_time.closing_time
        print('opening',opening)
    current_time = datetime.now()
    current_time = current_time.time()
    if current_time < closing or opening< current_time:
        print('opening')
    else:
        print('closed')
    return render(request, 'restaurant/homepage.html', {'restaurant':restaurant})

我怎样才能找到这个?在视图上编码或创建模板标签更好吗?

【问题讨论】:

  • 为什么不把它放在模型上,作为一个属性呢?
  • 感谢您的建议。哪一个是最佳实践?在模型中计算或创建自定义模板标签?
  • IMO 不值得提取模板标签,除非它将与多个模型/属性一起使用。另外:您刚刚使您的问题在内部不一致并使现有答案无效,因此我将其回滚。
  • 对不起,我是新人。我不知道那件事。我为我的错误道歉。

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


【解决方案1】:

我在工作场所与 django 一起工作了大约一个月,并且被教导不要将任何逻辑放入视图中。视图应该只是将数据从数据库传递或将数据发布到数据库。逻辑应该在模板标签中完成。

【讨论】:

  • 感谢您的回答。我已经根据当前时间检查了每家餐厅,但我如何才能根据当天检查餐厅是否营业或关闭?因为每天都有不同的开闭时间。
  • 您可以使用 datetime.datetime.today.weekday() 返回日期,0 是星期一,6 是星期日。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-07
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
  • 2018-09-04
  • 1970-01-01
相关资源
最近更新 更多