【发布时间】: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